mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-13 08:26:15 +00:00
merged in the latest UI changes and message-threads
This commit is contained in:
commit
f9be6c6dd6
@ -1,25 +1,35 @@
|
|||||||
AddBlackboardArtifactTagAction.pluralTagResult=Add Result Tags
|
AddBlackboardArtifactTagAction.pluralTagResult=Add Result Tags
|
||||||
AddBlackboardArtifactTagAction.singularTagResult=Add Result Tag
|
AddBlackboardArtifactTagAction.singularTagResult=Add Result Tag
|
||||||
AddBlackboardArtifactTagAction.taggingErr=Tagging Error
|
AddBlackboardArtifactTagAction.taggingErr=Tagging Error
|
||||||
|
# {0} - artifactName
|
||||||
AddBlackboardArtifactTagAction.unableToTag.msg=Unable to tag {0}.
|
AddBlackboardArtifactTagAction.unableToTag.msg=Unable to tag {0}.
|
||||||
AddContentTagAction.cannotApplyTagErr=Cannot Apply Tag
|
AddContentTagAction.cannotApplyTagErr=Cannot Apply Tag
|
||||||
AddContentTagAction.pluralTagFile=Add File Tags
|
AddContentTagAction.pluralTagFile=Add File Tags
|
||||||
AddContentTagAction.singularTagFile=Add File Tag
|
AddContentTagAction.singularTagFile=Add File Tag
|
||||||
|
# {0} - fileName
|
||||||
|
# {1} - tagName
|
||||||
AddContentTagAction.tagExists={0} has been tagged as {1}. Cannot reapply the same tag.
|
AddContentTagAction.tagExists={0} has been tagged as {1}. Cannot reapply the same tag.
|
||||||
AddContentTagAction.taggingErr=Tagging Error
|
AddContentTagAction.taggingErr=Tagging Error
|
||||||
|
# {0} - fileName
|
||||||
AddContentTagAction.unableToTag.msg=Unable to tag {0}, not a regular file.
|
AddContentTagAction.unableToTag.msg=Unable to tag {0}, not a regular file.
|
||||||
|
# {0} - fileName
|
||||||
AddContentTagAction.unableToTag.msg2=Unable to tag {0}.
|
AddContentTagAction.unableToTag.msg2=Unable to tag {0}.
|
||||||
CTL_ShowIngestProgressSnapshotAction=Ingest Status Details
|
CTL_ShowIngestProgressSnapshotAction=Ingest Status Details
|
||||||
DeleteBlackboardArtifactTagAction.deleteTag=Remove Selected Tag(s)
|
DeleteBlackboardArtifactTagAction.deleteTag=Remove Selected Tag(s)
|
||||||
DeleteBlackboardArtifactTagAction.tagDelErr=Tag Deletion Error
|
DeleteBlackboardArtifactTagAction.tagDelErr=Tag Deletion Error
|
||||||
|
# {0} - tagName
|
||||||
DeleteBlackboardArtifactTagAction.unableToDelTag.msg=Unable to delete tag {0}.
|
DeleteBlackboardArtifactTagAction.unableToDelTag.msg=Unable to delete tag {0}.
|
||||||
DeleteContentTagAction.deleteTag=Remove Selected Tag(s)
|
DeleteContentTagAction.deleteTag=Remove Selected Tag(s)
|
||||||
DeleteContentTagAction.tagDelErr=Tag Deletion Error
|
DeleteContentTagAction.tagDelErr=Tag Deletion Error
|
||||||
|
# {0} - tagName
|
||||||
DeleteContentTagAction.unableToDelTag.msg=Unable to delete tag {0}.
|
DeleteContentTagAction.unableToDelTag.msg=Unable to delete tag {0}.
|
||||||
DeleteFileBlackboardArtifactTagAction.deleteTag=Remove Result Tag
|
DeleteFileBlackboardArtifactTagAction.deleteTag=Remove Result Tag
|
||||||
|
# {0} - artifactID
|
||||||
DeleteFileBlackboardArtifactTagAction.deleteTag.alert=Unable to untag artifact {0}.
|
DeleteFileBlackboardArtifactTagAction.deleteTag.alert=Unable to untag artifact {0}.
|
||||||
|
# {0} - artifactID
|
||||||
DeleteFileBlackboardArtifactTagAction.deleteTags.alert=Unable to untag artifact {0}.
|
DeleteFileBlackboardArtifactTagAction.deleteTags.alert=Unable to untag artifact {0}.
|
||||||
DeleteFileContentTagAction.deleteTag=Remove File Tag
|
DeleteFileContentTagAction.deleteTag=Remove File Tag
|
||||||
|
# {0} - fileID
|
||||||
DeleteFileContentTagAction.deleteTag.alert=Unable to untag file {0}.
|
DeleteFileContentTagAction.deleteTag.alert=Unable to untag file {0}.
|
||||||
ExitAction.confirmationDialog.message=Ingest is running, are you sure you want to exit?
|
ExitAction.confirmationDialog.message=Ingest is running, are you sure you want to exit?
|
||||||
ExitAction.confirmationDialog.title=Ingest is Running
|
ExitAction.confirmationDialog.title=Ingest is Running
|
||||||
@ -73,7 +83,11 @@ CTL_OpenOutputFolder=Open Output Folder
|
|||||||
OpenOutputFolder.error1=Output Folder Not Found: {0}
|
OpenOutputFolder.error1=Output Folder Not Found: {0}
|
||||||
OpenOutputFolder.noCaseOpen=No open case, therefore no current output folder available.
|
OpenOutputFolder.noCaseOpen=No open case, therefore no current output folder available.
|
||||||
OpenOutputFolder.CouldNotOpenOutputFolder=Could not open output folder
|
OpenOutputFolder.CouldNotOpenOutputFolder=Could not open output folder
|
||||||
|
# {0} - old tag name
|
||||||
|
# {1} - artifactID
|
||||||
ReplaceBlackboardArtifactTagAction.replaceTag.alert=Unable to replace tag {0} for artifact {1}.
|
ReplaceBlackboardArtifactTagAction.replaceTag.alert=Unable to replace tag {0} for artifact {1}.
|
||||||
|
# {0} - old tag name
|
||||||
|
# {1} - content obj id
|
||||||
ReplaceContentTagAction.replaceTag.alert=Unable to replace tag {0} for {1}.
|
ReplaceContentTagAction.replaceTag.alert=Unable to replace tag {0} for {1}.
|
||||||
ReplaceTagAction.replaceTag=Replace Selected Tag(s) With
|
ReplaceTagAction.replaceTag=Replace Selected Tag(s) With
|
||||||
ShowIngestProgressSnapshotAction.actionName.text=Get Ingest Progress Snapshot
|
ShowIngestProgressSnapshotAction.actionName.text=Get Ingest Progress Snapshot
|
||||||
|
@ -238,13 +238,7 @@ OpenMultiUserCasePanel.cancelButton.text=Cancel
|
|||||||
OpenMultiUserCasePanel.openSingleUserCaseButton.text=Open Single-User Case...
|
OpenMultiUserCasePanel.openSingleUserCaseButton.text=Open Single-User Case...
|
||||||
OpenMultiUserCasePanel.openSelectedCaseButton.text=Open Selected Case
|
OpenMultiUserCasePanel.openSelectedCaseButton.text=Open Selected Case
|
||||||
OpenMultiUserCasePanel.searchLabel.text=Select any case and start typing to search by case name
|
OpenMultiUserCasePanel.searchLabel.text=Select any case and start typing to search by case name
|
||||||
LogicalImagerPanel.jLabel1.text=Insert external drive
|
|
||||||
LogicalImagerPanel.scanButton.text=Scan
|
|
||||||
LogicalImagerPanel.jLabel6.text=Or, pick a Logical Imager folder
|
|
||||||
LogicalImagerPanel.browseButton.text=Browse
|
LogicalImagerPanel.browseButton.text=Browse
|
||||||
LogicalImagerPanel.topLabel.text=Import Autopsy Imager Results
|
|
||||||
LogicalImagerPanel.selectDriveLabel.text=Select Drive
|
|
||||||
LogicalImagerPanel.messageLabel.text=Error/Status message
|
|
||||||
UnpackagePortableCaseDialog.desc2Label.text=Portable Case Report Module.
|
UnpackagePortableCaseDialog.desc2Label.text=Portable Case Report Module.
|
||||||
UnpackagePortableCaseDialog.desc1Label.text=Unpackage a portable case so it can be opened in Autopsy. Portable cases are created through the
|
UnpackagePortableCaseDialog.desc1Label.text=Unpackage a portable case so it can be opened in Autopsy. Portable cases are created through the
|
||||||
UnpackagePortableCaseDialog.exitButton.text=Exit
|
UnpackagePortableCaseDialog.exitButton.text=Exit
|
||||||
@ -260,3 +254,12 @@ UnpackagePortableCaseProgressDialog.okButton.text=OK
|
|||||||
UnpackagePortableCaseProgressDialog.resultLabel.text=resultLabel
|
UnpackagePortableCaseProgressDialog.resultLabel.text=resultLabel
|
||||||
UnpackagePortableCaseDialog.extractLabel.text=Folder to extract to:
|
UnpackagePortableCaseDialog.extractLabel.text=Folder to extract to:
|
||||||
UnpackagePortableCaseDialog.caseLabel.text=Portable Case:
|
UnpackagePortableCaseDialog.caseLabel.text=Portable Case:
|
||||||
|
LogicalImagerPanel.importRadioButton.text=Import From External Drive
|
||||||
|
LogicalImagerPanel.manualRadioButton.text=Manually Choose Folder
|
||||||
|
LogicalImagerPanel.importRadioButton.toolTipText=
|
||||||
|
LogicalImagerPanel.pathTextField.text=
|
||||||
|
LogicalImagerPanel.selectFolderLabel.text=Selected Folder:
|
||||||
|
LogicalImagerPanel.refreshButton.text=Refresh
|
||||||
|
LogicalImagerPanel.selectFromDriveLabel.text=Select Acquisition From Drive
|
||||||
|
LogicalImagerPanel.selectDriveLabel.text=Select Drive
|
||||||
|
LogicalImagerPanel.messageTextArea.text=
|
||||||
|
@ -1,10 +1,18 @@
|
|||||||
AddImageWizardIngestConfigPanel.name.text=Configure Ingest Modules
|
AddImageWizardIngestConfigPanel.name.text=Configure Ingest Modules
|
||||||
AddImageWizardSelectDspVisual.multiUserWarning.text=This type of Data Source Processor is not available in multi-user mode
|
AddImageWizardSelectDspVisual.multiUserWarning.text=This type of Data Source Processor is not available in multi-user mode
|
||||||
|
# {0} - file
|
||||||
AddLogicalImageTask.addingToReport=Adding {0} to report
|
AddLogicalImageTask.addingToReport=Adding {0} to report
|
||||||
|
# {0} - src
|
||||||
|
# {1} - dest
|
||||||
AddLogicalImageTask.copyingImageFromTo=Copying image from {0} to {1}
|
AddLogicalImageTask.copyingImageFromTo=Copying image from {0} to {1}
|
||||||
|
# {0} - file
|
||||||
AddLogicalImageTask.doneAddingToReport=Done adding {0} to report
|
AddLogicalImageTask.doneAddingToReport=Done adding {0} to report
|
||||||
AddLogicalImageTask.doneCopying=Done copying
|
AddLogicalImageTask.doneCopying=Done copying
|
||||||
|
# {0} - file
|
||||||
|
# {1} - exception message
|
||||||
AddLogicalImageTask.failedToAddReport=Failed to add report {0}. Reason= {1}
|
AddLogicalImageTask.failedToAddReport=Failed to add report {0}. Reason= {1}
|
||||||
|
# {0} - src
|
||||||
|
# {1} - dest
|
||||||
AddLogicalImageTask.failedToCopyDirectory=Failed to copy directory {0} to {1}
|
AddLogicalImageTask.failedToCopyDirectory=Failed to copy directory {0} to {1}
|
||||||
# {0} - exception message
|
# {0} - exception message
|
||||||
Case.closeException.couldNotCloseCase=Error closing case: {0}
|
Case.closeException.couldNotCloseCase=Error closing case: {0}
|
||||||
@ -12,6 +20,7 @@ Case.creationException.couldNotAcquireDirLock=Failed to get lock on case directo
|
|||||||
Case.creationException.couldNotAcquireResourcesLock=Failed to get lock on case resources
|
Case.creationException.couldNotAcquireResourcesLock=Failed to get lock on case resources
|
||||||
Case.deleteCaseConfirmationDialog.message=Are you sure you want to close and delete the current case?
|
Case.deleteCaseConfirmationDialog.message=Are you sure you want to close and delete the current case?
|
||||||
Case.deleteCaseConfirmationDialog.title=Delete Current Case?
|
Case.deleteCaseConfirmationDialog.title=Delete Current Case?
|
||||||
|
# {0} - exception message
|
||||||
Case.deleteCaseFailureMessageBox.message=Error deleting case: {0}
|
Case.deleteCaseFailureMessageBox.message=Error deleting case: {0}
|
||||||
Case.deleteCaseFailureMessageBox.title=Failed to Delete Case
|
Case.deleteCaseFailureMessageBox.title=Failed to Delete Case
|
||||||
Case.exceptionMessage.cancelledByUser=Cancelled by user.
|
Case.exceptionMessage.cancelledByUser=Cancelled by user.
|
||||||
@ -174,19 +183,23 @@ LogicalEvidenceFilePanel.validatePanel.nonL01Error.text=Only files with the .l01
|
|||||||
LogicalFilesDspPanel.subTypeComboBox.l01FileOption.text=Logical evidence file (L01)
|
LogicalFilesDspPanel.subTypeComboBox.l01FileOption.text=Logical evidence file (L01)
|
||||||
LogicalFilesDspPanel.subTypeComboBox.localFilesOption.text=Local files and folders
|
LogicalFilesDspPanel.subTypeComboBox.localFilesOption.text=Local files and folders
|
||||||
LogicalImagerDSProcessor.dataSourceType=Autopsy Imager
|
LogicalImagerDSProcessor.dataSourceType=Autopsy Imager
|
||||||
|
# {0} - directory
|
||||||
LogicalImagerDSProcessor.directoryAlreadyExists=Directory {0} already exists
|
LogicalImagerDSProcessor.directoryAlreadyExists=Directory {0} already exists
|
||||||
|
# {0} - directory
|
||||||
LogicalImagerDSProcessor.failToCreateDirectory=Failed to create directory {0}
|
LogicalImagerDSProcessor.failToCreateDirectory=Failed to create directory {0}
|
||||||
|
# {0} - imageDirPath
|
||||||
LogicalImagerDSProcessor.imageDirPathNotFound={0} not found.\nUSB drive has been ejected.
|
LogicalImagerDSProcessor.imageDirPathNotFound={0} not found.\nUSB drive has been ejected.
|
||||||
LogicalImagerPanel.imageTable.columnModel.title0=Hostname
|
LogicalImagerPanel.imageTable.columnModel.title0=Hostname
|
||||||
LogicalImagerPanel.imageTable.columnModel.title1=Extracted Date
|
LogicalImagerPanel.imageTable.columnModel.title1=Extracted Date
|
||||||
LogicalImagerPanel.messageLabel.clickScanOrBrowse=Click SCAN or BROWSE button to find images
|
# {0} - sparseImageDirectory
|
||||||
|
# {1} - image
|
||||||
LogicalImagerPanel.messageLabel.directoryDoesNotContainSparseImage=Directory {0} does not contain {1}
|
LogicalImagerPanel.messageLabel.directoryDoesNotContainSparseImage=Directory {0} does not contain {1}
|
||||||
|
# {0} - invalidFormatDirectory
|
||||||
LogicalImagerPanel.messageLabel.directoryFormatInvalid=Directory {0} does not match format Logical_Imager_HOSTNAME_yyyymmdd_HH_MM_SS
|
LogicalImagerPanel.messageLabel.directoryFormatInvalid=Directory {0} does not match format Logical_Imager_HOSTNAME_yyyymmdd_HH_MM_SS
|
||||||
LogicalImagerPanel.messageLabel.driveHasNoImages=Drive has no images
|
LogicalImagerPanel.messageLabel.driveHasNoImages=Drive has no images
|
||||||
LogicalImagerPanel.messageLabel.noExternalDriveFound=No drive found
|
LogicalImagerPanel.messageLabel.noExternalDriveFound=No drive found
|
||||||
LogicalImagerPanel.messageLabel.noImageSelected=No image selected
|
LogicalImagerPanel.messageLabel.noImageSelected=No image selected
|
||||||
LogicalImagerPanel.messageLabel.scanningExternalDrives=Scanning external drives for sparse_image.vhd ...
|
LogicalImagerPanel.messageLabel.scanningExternalDrives=Scanning external drives for sparse_image.vhd ...
|
||||||
LogicalImagerPanel.messageLabel.selectedImage=Selected folder
|
|
||||||
LogicalImagerPanel.selectAcquisitionFromDriveLabel.text=Select acquisition from Drive
|
LogicalImagerPanel.selectAcquisitionFromDriveLabel.text=Select acquisition from Drive
|
||||||
Menu/Case/OpenRecentCase=Open Recent Case
|
Menu/Case/OpenRecentCase=Open Recent Case
|
||||||
CTL_CaseDeleteAction=Delete Case
|
CTL_CaseDeleteAction=Delete Case
|
||||||
@ -251,10 +264,15 @@ AddImageWizardIngestConfigPanel.dsProcDone.errs.text=*Errors encountered in addi
|
|||||||
AddImageWizardIngestConfigVisual.getName.text=Configure Ingest Modules
|
AddImageWizardIngestConfigVisual.getName.text=Configure Ingest Modules
|
||||||
AddImageWizardIterator.stepXofN=Step {0} of {1}
|
AddImageWizardIterator.stepXofN=Step {0} of {1}
|
||||||
AddLocalFilesTask.localFileAdd.progress.text=Adding: {0}/{1}
|
AddLocalFilesTask.localFileAdd.progress.text=Adding: {0}/{1}
|
||||||
Case.getCurCase.exception.noneOpen=Cannot get the current case; there is no case open!
|
Case.getCurCase.exception.noneOpen=Cannot get the current case; there is no case open\!
|
||||||
Case.open.msgDlg.updated.msg=Updated case database schema.\nA backup copy of the database with the following path has been made:\n {0}
|
Case.open.msgDlg.updated.msg=Updated case database schema.\nA backup copy of the database with the following path has been made:\n {0}
|
||||||
Case.open.msgDlg.updated.title=Case Database Schema Update
|
Case.open.msgDlg.updated.title=Case Database Schema Update
|
||||||
Case.checkImgExist.confDlg.doesntExist.msg=One of the images associated with \nthis case are missing. Would you like to search for them now?\nPreviously, the image was located at:\n{0}\nPlease note that you will still be able to browse directories and generate reports\nif you choose No, but you will not be able to view file content or run the ingest process.
|
Case.checkImgExist.confDlg.doesntExist.msg=One of the images associated with \n\
|
||||||
|
this case are missing. Would you like to search for them now?\n\
|
||||||
|
Previously, the image was located at:\n\
|
||||||
|
{0}\n\
|
||||||
|
Please note that you will still be able to browse directories and generate reports\n\
|
||||||
|
if you choose No, but you will not be able to view file content or run the ingest process.
|
||||||
Case.checkImgExist.confDlg.doesntExist.title=Missing Image
|
Case.checkImgExist.confDlg.doesntExist.title=Missing Image
|
||||||
Case.addImg.exception.msg=Error adding image to the case
|
Case.addImg.exception.msg=Error adding image to the case
|
||||||
Case.updateCaseName.exception.msg=Error while trying to update the case name.
|
Case.updateCaseName.exception.msg=Error while trying to update the case name.
|
||||||
@ -273,9 +291,12 @@ Case.GetCaseTypeGivenPath.Failure=Unable to get case type
|
|||||||
Case.metaDataFileCorrupt.exception.msg=The case metadata file (.aut) is corrupted.
|
Case.metaDataFileCorrupt.exception.msg=The case metadata file (.aut) is corrupted.
|
||||||
Case.deleteReports.deleteFromDiskException.log.msg=Unable to delete the report from the disk.
|
Case.deleteReports.deleteFromDiskException.log.msg=Unable to delete the report from the disk.
|
||||||
Case.deleteReports.deleteFromDiskException.msg=Unable to delete the report {0} from the disk.\nYou may manually delete it from {1}
|
Case.deleteReports.deleteFromDiskException.msg=Unable to delete the report {0} from the disk.\nYou may manually delete it from {1}
|
||||||
CaseDeleteAction.closeConfMsg.text=Are you sure want to close and delete this case? \nCase Name: {0}\nCase Directory: {1}
|
CaseDeleteAction.closeConfMsg.text=Are you sure want to close and delete this case? \n\
|
||||||
|
Case Name: {0}\n\
|
||||||
|
Case Directory: {1}
|
||||||
CaseDeleteAction.closeConfMsg.title=Warning: Closing the Current Case
|
CaseDeleteAction.closeConfMsg.title=Warning: Closing the Current Case
|
||||||
CaseDeleteAction.msgDlg.fileInUse.msg=The delete action cannot be fully completed because the folder or file in it is open by another program.\n\nClose the folder and file and try again or you can delete the case manually.
|
CaseDeleteAction.msgDlg.fileInUse.msg=The delete action cannot be fully completed because the folder or file in it is open by another program.\n\n\
|
||||||
|
Close the folder and file and try again or you can delete the case manually.
|
||||||
CaseDeleteAction.msgDlg.fileInUse.title=Error: Folder In Use
|
CaseDeleteAction.msgDlg.fileInUse.title=Error: Folder In Use
|
||||||
CaseDeleteAction.msgDlg.caseDelete.msg=Case {0} has been deleted.
|
CaseDeleteAction.msgDlg.caseDelete.msg=Case {0} has been deleted.
|
||||||
CaseOpenAction.autFilter.title={0} Case File ( {1})
|
CaseOpenAction.autFilter.title={0} Case File ( {1})
|
||||||
@ -307,7 +328,8 @@ NewCaseWizardAction.databaseProblem1.text=Cannot open database. Cancelling case
|
|||||||
NewCaseWizardAction.databaseProblem2.text=Error
|
NewCaseWizardAction.databaseProblem2.text=Error
|
||||||
NewCaseWizardPanel1.validate.errMsg.invalidSymbols=The Case Name cannot contain any of the following symbols: \\ / : * ? " < > |
|
NewCaseWizardPanel1.validate.errMsg.invalidSymbols=The Case Name cannot contain any of the following symbols: \\ / : * ? " < > |
|
||||||
NewCaseWizardPanel1.validate.errMsg.dirExists=Case directory ''{0}'' already exists.
|
NewCaseWizardPanel1.validate.errMsg.dirExists=Case directory ''{0}'' already exists.
|
||||||
NewCaseWizardPanel1.validate.confMsg.createDir.msg=The base directory "{0}" does not exist. \n\nDo you want to create that directory?
|
NewCaseWizardPanel1.validate.confMsg.createDir.msg=The base directory "{0}" does not exist. \n\n\
|
||||||
|
Do you want to create that directory?
|
||||||
NewCaseWizardPanel1.validate.confMsg.createDir.title=Create directory
|
NewCaseWizardPanel1.validate.confMsg.createDir.title=Create directory
|
||||||
NewCaseWizardPanel1.validate.errMsg.cantCreateParDir.msg=Error: Could not create case parent directory {0}
|
NewCaseWizardPanel1.validate.errMsg.cantCreateParDir.msg=Error: Could not create case parent directory {0}
|
||||||
NewCaseWizardPanel1.validate.errMsg.prevCreateBaseDir.msg=Prevented from creating base directory {0}
|
NewCaseWizardPanel1.validate.errMsg.prevCreateBaseDir.msg=Prevented from creating base directory {0}
|
||||||
@ -336,12 +358,14 @@ OptionalCasePropertiesPanel.lbPointOfContactPhoneLabel.text=Phone:
|
|||||||
OptionalCasePropertiesPanel.orgainizationPanel.border.title=Organization
|
OptionalCasePropertiesPanel.orgainizationPanel.border.title=Organization
|
||||||
RecentCases.exception.caseIdxOutOfRange.msg=Recent case index {0} is out of range.
|
RecentCases.exception.caseIdxOutOfRange.msg=Recent case index {0} is out of range.
|
||||||
RecentCases.getName.text=Clear Recent Cases
|
RecentCases.getName.text=Clear Recent Cases
|
||||||
|
# {0} - case name
|
||||||
RecentItems.openRecentCase.msgDlg.text=Case {0} no longer exists.
|
RecentItems.openRecentCase.msgDlg.text=Case {0} no longer exists.
|
||||||
SelectDataSourceProcessorPanel.name.text=Select Type of Data Source To Add
|
SelectDataSourceProcessorPanel.name.text=Select Type of Data Source To Add
|
||||||
StartupWindow.title.text=Welcome
|
StartupWindow.title.text=Welcome
|
||||||
UnpackagePortableCaseDialog.title.text=Unpackage Portable Case
|
UnpackagePortableCaseDialog.title.text=Unpackage Portable Case
|
||||||
UnpackagePortableCaseDialog.UnpackagePortableCaseDialog.extensions=Portable case package (.zip, .zip.001)
|
UnpackagePortableCaseDialog.UnpackagePortableCaseDialog.extensions=Portable case package (.zip, .zip.001)
|
||||||
UnpackagePortableCaseDialog.validatePaths.badExtension=File extension must be .zip or .zip.001
|
UnpackagePortableCaseDialog.validatePaths.badExtension=File extension must be .zip or .zip.001
|
||||||
|
# {0} - case folder
|
||||||
UnpackagePortableCaseDialog.validatePaths.caseFolderExists=Folder {0} already exists
|
UnpackagePortableCaseDialog.validatePaths.caseFolderExists=Folder {0} already exists
|
||||||
UnpackagePortableCaseDialog.validatePaths.caseIsNotFile=Selected path is not a file
|
UnpackagePortableCaseDialog.validatePaths.caseIsNotFile=Selected path is not a file
|
||||||
UnpackagePortableCaseDialog.validatePaths.caseNotFound=File does not exist
|
UnpackagePortableCaseDialog.validatePaths.caseNotFound=File does not exist
|
||||||
@ -355,15 +379,15 @@ UnpackageWorker.doInBackground.errorFinding7zip=Could not locate 7-Zip executabl
|
|||||||
UpdateRecentCases.menuItem.clearRecentCases.text=Clear Recent Cases
|
UpdateRecentCases.menuItem.clearRecentCases.text=Clear Recent Cases
|
||||||
UpdateRecentCases.menuItem.empty=-Empty-
|
UpdateRecentCases.menuItem.empty=-Empty-
|
||||||
AddImageWizardIngestConfigPanel.CANCEL_BUTTON.text=Cancel
|
AddImageWizardIngestConfigPanel.CANCEL_BUTTON.text=Cancel
|
||||||
NewCaseVisualPanel1.CaseFolderOnCDriveError.text=Warning: Path to multi-user case folder is on "C:" drive
|
NewCaseVisualPanel1.CaseFolderOnCDriveError.text=Warning: Path to multi-user case folder is on \"C:\" drive
|
||||||
NewCaseVisualPanel1.CaseFolderOnInternalDriveWindowsError.text=Warning: Path to case folder is on "C:" drive. Case folder is created on the target system
|
NewCaseVisualPanel1.CaseFolderOnInternalDriveWindowsError.text=Warning: Path to case folder is on \"C:\" drive. Case folder is created on the target system
|
||||||
NewCaseVisualPanel1.CaseFolderOnInternalDriveLinuxError.text=Warning: Path to case folder is on the target system. Create case folder in mounted drive.
|
NewCaseVisualPanel1.CaseFolderOnInternalDriveLinuxError.text=Warning: Path to case folder is on the target system. Create case folder in mounted drive.
|
||||||
CollaborationMonitor.addingDataSourceStatus.msg={0} adding data source
|
CollaborationMonitor.addingDataSourceStatus.msg={0} adding data source
|
||||||
CollaborationMonitor.analyzingDataSourceStatus.msg={0} analyzing {1}
|
CollaborationMonitor.analyzingDataSourceStatus.msg={0} analyzing {1}
|
||||||
MissingImageDialog.lbWarning.text=
|
MissingImageDialog.lbWarning.text=
|
||||||
MissingImageDialog.lbWarning.toolTipText=
|
MissingImageDialog.lbWarning.toolTipText=
|
||||||
NewCaseVisualPanel1.caseParentDirWarningLabel.text=
|
NewCaseVisualPanel1.caseParentDirWarningLabel.text=
|
||||||
NewCaseVisualPanel1.multiUserCaseRadioButton.text=Multi-user\t\t
|
NewCaseVisualPanel1.multiUserCaseRadioButton.text=Multi-user
|
||||||
NewCaseVisualPanel1.singleUserCaseRadioButton.text=Single-user
|
NewCaseVisualPanel1.singleUserCaseRadioButton.text=Single-user
|
||||||
NewCaseVisualPanel1.caseTypeLabel.text=Case Type:
|
NewCaseVisualPanel1.caseTypeLabel.text=Case Type:
|
||||||
SingleUserCaseConverter.BadDatabaseFileName=Database file does not exist!
|
SingleUserCaseConverter.BadDatabaseFileName=Database file does not exist!
|
||||||
@ -449,13 +473,7 @@ OpenMultiUserCasePanel.cancelButton.text=Cancel
|
|||||||
OpenMultiUserCasePanel.openSingleUserCaseButton.text=Open Single-User Case...
|
OpenMultiUserCasePanel.openSingleUserCaseButton.text=Open Single-User Case...
|
||||||
OpenMultiUserCasePanel.openSelectedCaseButton.text=Open Selected Case
|
OpenMultiUserCasePanel.openSelectedCaseButton.text=Open Selected Case
|
||||||
OpenMultiUserCasePanel.searchLabel.text=Select any case and start typing to search by case name
|
OpenMultiUserCasePanel.searchLabel.text=Select any case and start typing to search by case name
|
||||||
LogicalImagerPanel.jLabel1.text=Insert external drive
|
|
||||||
LogicalImagerPanel.scanButton.text=Scan
|
|
||||||
LogicalImagerPanel.jLabel6.text=Or, pick a Logical Imager folder
|
|
||||||
LogicalImagerPanel.browseButton.text=Browse
|
LogicalImagerPanel.browseButton.text=Browse
|
||||||
LogicalImagerPanel.topLabel.text=Import Autopsy Imager Results
|
|
||||||
LogicalImagerPanel.selectDriveLabel.text=Select Drive
|
|
||||||
LogicalImagerPanel.messageLabel.text=Error/Status message
|
|
||||||
UnpackagePortableCaseDialog.desc2Label.text=Portable Case Report Module.
|
UnpackagePortableCaseDialog.desc2Label.text=Portable Case Report Module.
|
||||||
UnpackagePortableCaseDialog.desc1Label.text=Unpackage a portable case so it can be opened in Autopsy. Portable cases are created through the
|
UnpackagePortableCaseDialog.desc1Label.text=Unpackage a portable case so it can be opened in Autopsy. Portable cases are created through the
|
||||||
UnpackagePortableCaseDialog.exitButton.text=Exit
|
UnpackagePortableCaseDialog.exitButton.text=Exit
|
||||||
@ -471,3 +489,12 @@ UnpackagePortableCaseProgressDialog.okButton.text=OK
|
|||||||
UnpackagePortableCaseProgressDialog.resultLabel.text=resultLabel
|
UnpackagePortableCaseProgressDialog.resultLabel.text=resultLabel
|
||||||
UnpackagePortableCaseDialog.extractLabel.text=Folder to extract to:
|
UnpackagePortableCaseDialog.extractLabel.text=Folder to extract to:
|
||||||
UnpackagePortableCaseDialog.caseLabel.text=Portable Case:
|
UnpackagePortableCaseDialog.caseLabel.text=Portable Case:
|
||||||
|
LogicalImagerPanel.importRadioButton.text=Import From External Drive
|
||||||
|
LogicalImagerPanel.manualRadioButton.text=Manually Choose Folder
|
||||||
|
LogicalImagerPanel.importRadioButton.toolTipText=
|
||||||
|
LogicalImagerPanel.pathTextField.text=
|
||||||
|
LogicalImagerPanel.selectFolderLabel.text=Selected Folder:
|
||||||
|
LogicalImagerPanel.refreshButton.text=Refresh
|
||||||
|
LogicalImagerPanel.selectFromDriveLabel.text=Select Acquisition From Drive
|
||||||
|
LogicalImagerPanel.selectDriveLabel.text=Select Drive
|
||||||
|
LogicalImagerPanel.messageTextArea.text=
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
|
||||||
<Form version="1.6" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
<Form version="1.6" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JPanelFormInfo">
|
||||||
|
<NonVisualComponents>
|
||||||
|
<Component class="javax.swing.ButtonGroup" name="buttonGroup1">
|
||||||
|
</Component>
|
||||||
|
</NonVisualComponents>
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
<Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor">
|
||||||
<Dimension value="[0, 65]"/>
|
<Dimension value="[0, 65]"/>
|
||||||
@ -25,118 +29,146 @@
|
|||||||
<DimensionLayout dim="0">
|
<DimensionLayout dim="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<EmptySpace min="-2" pref="238" max="-2" attributes="0"/>
|
|
||||||
<Component id="topLabel" min="-2" pref="163" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Group type="102" alignment="0" attributes="0">
|
|
||||||
<EmptySpace min="-2" pref="28" max="-2" attributes="0"/>
|
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
|
||||||
<Component id="messageLabel" alignment="1" max="32767" attributes="0"/>
|
|
||||||
<Group type="102" alignment="0" attributes="0">
|
|
||||||
<Group type="103" groupAlignment="1" max="-2" attributes="0">
|
|
||||||
<Component id="jSeparator1" alignment="0" max="32767" attributes="0"/>
|
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
|
||||||
<Group type="102" alignment="0" attributes="0">
|
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<Component id="selectDriveLabel" min="-2" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="10" max="-2" attributes="0"/>
|
||||||
<EmptySpace min="-2" pref="289" max="-2" attributes="0"/>
|
<Component id="selectFolderLabel" min="-2" pref="81" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace min="-2" pref="13" max="-2" attributes="0"/>
|
||||||
|
<Component id="pathTextField" min="-2" pref="474" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="102" alignment="1" attributes="0">
|
<Group type="103" groupAlignment="1" max="-2" attributes="0">
|
||||||
<Component id="scanButton" min="-2" max="-2" attributes="0"/>
|
<Component id="jSeparator2" alignment="0" max="32767" attributes="0"/>
|
||||||
<EmptySpace min="-2" pref="126" max="-2" attributes="0"/>
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<EmptySpace min="41" pref="41" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="driveListScrollPane" alignment="0" min="-2" pref="160" max="-2" attributes="0"/>
|
||||||
|
<Component id="refreshButton" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Component id="imageScrollPane" min="-2" pref="377" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace min="-2" pref="36" max="-2" attributes="0"/>
|
<Group type="102" attributes="0">
|
||||||
|
<EmptySpace min="20" pref="20" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="manualRadioButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="browseButton" min="-2" max="-2" attributes="0"/>
|
<Component id="browseButton" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Component id="importRadioButton" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="driveListScrollPane" min="-2" pref="211" max="-2" attributes="0"/>
|
<Group type="102" attributes="0">
|
||||||
<EmptySpace min="-2" pref="28" max="-2" attributes="0"/>
|
<EmptySpace min="21" pref="21" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Component id="selectDriveLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="selectAcquisitionFromDriveLabel" min="-2" pref="305" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="113" max="-2" attributes="0"/>
|
||||||
<Component id="imageScrollPane" min="-2" pref="346" max="-2" attributes="0"/>
|
<Component id="selectFromDriveLabel" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<EmptySpace min="-2" pref="346" max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="jLabel6" min="-2" pref="154" max="-2" attributes="0"/>
|
<Component id="jScrollPane1" min="-2" pref="568" max="-2" attributes="0"/>
|
||||||
</Group>
|
|
||||||
<Group type="102" alignment="0" attributes="0">
|
|
||||||
<EmptySpace min="-2" pref="144" max="-2" attributes="0"/>
|
|
||||||
<Component id="jLabel1" min="-2" pref="116" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
|
||||||
<EmptySpace pref="48" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
|
<EmptySpace pref="14" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
<DimensionLayout dim="1">
|
<DimensionLayout dim="1">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<Component id="topLabel" min="-2" max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="16" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<Component id="importRadioButton" min="-2" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
<EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Group type="103" groupAlignment="2" attributes="0">
|
||||||
<Component id="jLabel6" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="selectDriveLabel" alignment="2" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="selectFromDriveLabel" alignment="2" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Component id="scanButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
<Component id="browseButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
|
||||||
<Component id="jSeparator1" min="-2" pref="4" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
|
||||||
<Component id="selectDriveLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
<Component id="selectAcquisitionFromDriveLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<EmptySpace max="32767" attributes="0"/>
|
|
||||||
<Group type="103" groupAlignment="0" max="-2" attributes="0">
|
|
||||||
<Component id="imageScrollPane" pref="0" max="32767" attributes="0"/>
|
<Component id="imageScrollPane" pref="0" max="32767" attributes="0"/>
|
||||||
<Component id="driveListScrollPane" pref="194" max="32767" attributes="0"/>
|
<Component id="driveListScrollPane" pref="186" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace min="-2" pref="26" max="-2" attributes="0"/>
|
<EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="messageLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="refreshButton" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace min="-2" pref="154" max="-2" attributes="0"/>
|
<EmptySpace type="separate" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="browseButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="manualRadioButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace type="separate" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="jSeparator2" min="-2" pref="16" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="selectFolderLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="pathTextField" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="jScrollPane1" min="-2" pref="61" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace min="-2" pref="6" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
</Layout>
|
</Layout>
|
||||||
<SubComponents>
|
<SubComponents>
|
||||||
<Component class="javax.swing.JLabel" name="topLabel">
|
<Component class="javax.swing.JButton" name="browseButton">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LogicalImagerPanel.topLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LogicalImagerPanel.browseButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
|
<Property name="enabled" type="boolean" value="false"/>
|
||||||
</Properties>
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="browseButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JLabel" name="jLabel1">
|
<Component class="javax.swing.JRadioButton" name="importRadioButton">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LogicalImagerPanel.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ComponentRef name="buttonGroup1"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
<Property name="selected" type="boolean" value="true"/>
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JButton" name="scanButton">
|
|
||||||
<Properties>
|
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LogicalImagerPanel.scanButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LogicalImagerPanel.importRadioButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LogicalImagerPanel.importRadioButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
<Events>
|
<Events>
|
||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="scanButtonActionPerformed"/>
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="importRadioButtonActionPerformed"/>
|
||||||
</Events>
|
</Events>
|
||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JLabel" name="messageLabel">
|
<Component class="javax.swing.JRadioButton" name="manualRadioButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor">
|
||||||
|
<ComponentRef name="buttonGroup1"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LogicalImagerPanel.manualRadioButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="manualRadioButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JTextField" name="pathTextField">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LogicalImagerPanel.messageLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LogicalImagerPanel.pathTextField.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="disabledTextColor" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
||||||
|
<Color blue="0" green="0" id="black" palette="1" red="0" type="palette"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="enabled" type="boolean" value="false"/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="selectFolderLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LogicalImagerPanel.selectFolderLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
@ -147,6 +179,13 @@
|
|||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="selectFromDriveLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LogicalImagerPanel.selectFromDriveLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
<Container class="javax.swing.JScrollPane" name="driveListScrollPane">
|
<Container class="javax.swing.JScrollPane" name="driveListScrollPane">
|
||||||
<AuxValues>
|
<AuxValues>
|
||||||
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
|
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
|
||||||
@ -162,7 +201,7 @@
|
|||||||
<Property name="selectionMode" type="int" value="0"/>
|
<Property name="selectionMode" type="int" value="0"/>
|
||||||
</Properties>
|
</Properties>
|
||||||
<Events>
|
<Events>
|
||||||
<EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="driveListMouseClicked"/>
|
<EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="driveListMouseReleased"/>
|
||||||
<EventHandler event="keyReleased" listener="java.awt.event.KeyListener" parameters="java.awt.event.KeyEvent" handler="driveListKeyReleased"/>
|
<EventHandler event="keyReleased" listener="java.awt.event.KeyListener" parameters="java.awt.event.KeyEvent" handler="driveListKeyReleased"/>
|
||||||
</Events>
|
</Events>
|
||||||
<AuxValues>
|
<AuxValues>
|
||||||
@ -171,28 +210,14 @@
|
|||||||
</Component>
|
</Component>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Container>
|
</Container>
|
||||||
<Component class="javax.swing.JLabel" name="selectAcquisitionFromDriveLabel">
|
<Component class="javax.swing.JButton" name="refreshButton">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LogicalImagerPanel.selectAcquisitionFromDriveLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LogicalImagerPanel.refreshButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JLabel" name="jLabel6">
|
|
||||||
<Properties>
|
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LogicalImagerPanel.jLabel6.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JButton" name="browseButton">
|
|
||||||
<Properties>
|
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LogicalImagerPanel.browseButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
<Events>
|
<Events>
|
||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="browseButtonActionPerformed"/>
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="refreshButtonActionPerformed"/>
|
||||||
</Events>
|
</Events>
|
||||||
</Component>
|
</Component>
|
||||||
<Container class="javax.swing.JScrollPane" name="imageScrollPane">
|
<Container class="javax.swing.JScrollPane" name="imageScrollPane">
|
||||||
@ -224,13 +249,56 @@
|
|||||||
<Property name="updateSelectionOnSort" type="boolean" value="false"/>
|
<Property name="updateSelectionOnSort" type="boolean" value="false"/>
|
||||||
</Properties>
|
</Properties>
|
||||||
<Events>
|
<Events>
|
||||||
<EventHandler event="mouseClicked" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="imageTableMouseClicked"/>
|
<EventHandler event="mouseReleased" listener="java.awt.event.MouseListener" parameters="java.awt.event.MouseEvent" handler="imageTableMouseReleased"/>
|
||||||
<EventHandler event="keyReleased" listener="java.awt.event.KeyListener" parameters="java.awt.event.KeyEvent" handler="imageTableKeyReleased"/>
|
<EventHandler event="keyReleased" listener="java.awt.event.KeyListener" parameters="java.awt.event.KeyEvent" handler="imageTableKeyReleased"/>
|
||||||
</Events>
|
</Events>
|
||||||
</Component>
|
</Component>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Container>
|
</Container>
|
||||||
<Component class="javax.swing.JSeparator" name="jSeparator1">
|
<Component class="javax.swing.JSeparator" name="jSeparator2">
|
||||||
|
</Component>
|
||||||
|
<Container class="javax.swing.JScrollPane" name="jScrollPane1">
|
||||||
|
<Properties>
|
||||||
|
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||||
|
<Border info="null"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/>
|
||||||
|
</AuxValues>
|
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JTextArea" name="messageTextArea">
|
||||||
|
<Properties>
|
||||||
|
<Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
||||||
|
<Color blue="f0" green="f0" red="f0" type="rgb"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="columns" type="int" value="20"/>
|
||||||
|
<Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
||||||
|
<Color blue="0" green="0" id="red" palette="1" red="ff" type="palette"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="lineWrap" type="boolean" value="true"/>
|
||||||
|
<Property name="rows" type="int" value="3"/>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LogicalImagerPanel.messageTextArea.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||||
|
<Border info="null"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="disabledTextColor" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
||||||
|
<Color blue="0" green="0" id="red" palette="1" red="ff" type="palette"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="enabled" type="boolean" value="false"/>
|
||||||
|
<Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor">
|
||||||
|
<Insets value="[0, 0, 0, 0]"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
<BindingProperties>
|
||||||
|
<BindingProperty name="editable" source="messageTextArea" sourcePath="false" target="messageTextArea" targetPath="editable" updateStrategy="0" immediately="false"/>
|
||||||
|
</BindingProperties>
|
||||||
</Component>
|
</Component>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
</SubComponents>
|
||||||
</Form>
|
</Form>
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
package org.sleuthkit.autopsy.casemodule;
|
package org.sleuthkit.autopsy.casemodule;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
|
import java.awt.Component;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.FileStore;
|
import java.nio.file.FileStore;
|
||||||
@ -46,7 +47,6 @@ import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor;
|
|||||||
* select a file.
|
* select a file.
|
||||||
*/
|
*/
|
||||||
@Messages({
|
@Messages({
|
||||||
"LogicalImagerPanel.messageLabel.selectedImage=Selected folder",
|
|
||||||
"LogicalImagerPanel.messageLabel.noImageSelected=No image selected",
|
"LogicalImagerPanel.messageLabel.noImageSelected=No image selected",
|
||||||
"LogicalImagerPanel.messageLabel.driveHasNoImages=Drive has no images",
|
"LogicalImagerPanel.messageLabel.driveHasNoImages=Drive has no images",
|
||||||
"LogicalImagerPanel.selectAcquisitionFromDriveLabel.text=Select acquisition from Drive",})
|
"LogicalImagerPanel.selectAcquisitionFromDriveLabel.text=Select acquisition from Drive",})
|
||||||
@ -55,7 +55,6 @@ public class LogicalImagerPanel extends JPanel implements DocumentListener {
|
|||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
private static final String SPARSE_IMAGE_VHD = "sparse_image.vhd"; //NON-NLS
|
private static final String SPARSE_IMAGE_VHD = "sparse_image.vhd"; //NON-NLS
|
||||||
private static final String SELECTED_IMAGE = Bundle.LogicalImagerPanel_messageLabel_selectedImage();
|
|
||||||
private static final String NO_IMAGE_SELECTED = Bundle.LogicalImagerPanel_messageLabel_noImageSelected();
|
private static final String NO_IMAGE_SELECTED = Bundle.LogicalImagerPanel_messageLabel_noImageSelected();
|
||||||
private static final String DRIVE_HAS_NO_IMAGES = Bundle.LogicalImagerPanel_messageLabel_driveHasNoImages();
|
private static final String DRIVE_HAS_NO_IMAGES = Bundle.LogicalImagerPanel_messageLabel_driveHasNoImages();
|
||||||
private static final String[] EMPTY_LIST_DATA = {};
|
private static final String[] EMPTY_LIST_DATA = {};
|
||||||
@ -75,6 +74,7 @@ public class LogicalImagerPanel extends JPanel implements DocumentListener {
|
|||||||
private LogicalImagerPanel(String context) {
|
private LogicalImagerPanel(String context) {
|
||||||
this.contextName = context;
|
this.contextName = context;
|
||||||
initComponents();
|
initComponents();
|
||||||
|
jScrollPane1.setBorder(null);
|
||||||
clearImageTable();
|
clearImageTable();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,13 +86,9 @@ public class LogicalImagerPanel extends JPanel implements DocumentListener {
|
|||||||
*
|
*
|
||||||
* @return instance of the LogicalImagerPanel
|
* @return instance of the LogicalImagerPanel
|
||||||
*/
|
*/
|
||||||
@Messages({
|
|
||||||
"LogicalImagerPanel.messageLabel.clickScanOrBrowse=Click SCAN or BROWSE button to find images"
|
|
||||||
})
|
|
||||||
public static synchronized LogicalImagerPanel createInstance(String context) {
|
public static synchronized LogicalImagerPanel createInstance(String context) {
|
||||||
LogicalImagerPanel instance = new LogicalImagerPanel(context);
|
LogicalImagerPanel instance = new LogicalImagerPanel(context);
|
||||||
// post-constructor initialization of listener support without leaking references of uninitialized objects
|
// post-constructor initialization of listener support without leaking references of uninitialized objects
|
||||||
instance.messageLabel.setText(Bundle.LogicalImagerPanel_messageLabel_clickScanOrBrowse());
|
|
||||||
instance.imageTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
instance.imageTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
@ -104,43 +100,68 @@ public class LogicalImagerPanel extends JPanel implements DocumentListener {
|
|||||||
*/
|
*/
|
||||||
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||||
private void initComponents() {
|
private void initComponents() {
|
||||||
|
bindingGroup = new org.jdesktop.beansbinding.BindingGroup();
|
||||||
|
|
||||||
topLabel = new javax.swing.JLabel();
|
buttonGroup1 = new javax.swing.ButtonGroup();
|
||||||
jLabel1 = new javax.swing.JLabel();
|
browseButton = new javax.swing.JButton();
|
||||||
scanButton = new javax.swing.JButton();
|
importRadioButton = new javax.swing.JRadioButton();
|
||||||
messageLabel = new javax.swing.JLabel();
|
manualRadioButton = new javax.swing.JRadioButton();
|
||||||
|
pathTextField = new javax.swing.JTextField();
|
||||||
|
selectFolderLabel = new javax.swing.JLabel();
|
||||||
selectDriveLabel = new javax.swing.JLabel();
|
selectDriveLabel = new javax.swing.JLabel();
|
||||||
|
selectFromDriveLabel = new javax.swing.JLabel();
|
||||||
driveListScrollPane = new javax.swing.JScrollPane();
|
driveListScrollPane = new javax.swing.JScrollPane();
|
||||||
driveList = new javax.swing.JList<>();
|
driveList = new javax.swing.JList<>();
|
||||||
selectAcquisitionFromDriveLabel = new javax.swing.JLabel();
|
refreshButton = new javax.swing.JButton();
|
||||||
jLabel6 = new javax.swing.JLabel();
|
|
||||||
browseButton = new javax.swing.JButton();
|
|
||||||
imageScrollPane = new javax.swing.JScrollPane();
|
imageScrollPane = new javax.swing.JScrollPane();
|
||||||
imageTable = new javax.swing.JTable();
|
imageTable = new javax.swing.JTable();
|
||||||
jSeparator1 = new javax.swing.JSeparator();
|
jSeparator2 = new javax.swing.JSeparator();
|
||||||
|
jScrollPane1 = new javax.swing.JScrollPane();
|
||||||
|
messageTextArea = new javax.swing.JTextArea();
|
||||||
|
|
||||||
setMinimumSize(new java.awt.Dimension(0, 65));
|
setMinimumSize(new java.awt.Dimension(0, 65));
|
||||||
setPreferredSize(new java.awt.Dimension(403, 65));
|
setPreferredSize(new java.awt.Dimension(403, 65));
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(topLabel, org.openide.util.NbBundle.getMessage(LogicalImagerPanel.class, "LogicalImagerPanel.topLabel.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(browseButton, org.openide.util.NbBundle.getMessage(LogicalImagerPanel.class, "LogicalImagerPanel.browseButton.text")); // NOI18N
|
||||||
|
browseButton.setEnabled(false);
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(LogicalImagerPanel.class, "LogicalImagerPanel.jLabel1.text")); // NOI18N
|
browseButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(scanButton, org.openide.util.NbBundle.getMessage(LogicalImagerPanel.class, "LogicalImagerPanel.scanButton.text")); // NOI18N
|
|
||||||
scanButton.addActionListener(new java.awt.event.ActionListener() {
|
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
scanButtonActionPerformed(evt);
|
browseButtonActionPerformed(evt);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(messageLabel, org.openide.util.NbBundle.getMessage(LogicalImagerPanel.class, "LogicalImagerPanel.messageLabel.text")); // NOI18N
|
buttonGroup1.add(importRadioButton);
|
||||||
|
importRadioButton.setSelected(true);
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(importRadioButton, org.openide.util.NbBundle.getMessage(LogicalImagerPanel.class, "LogicalImagerPanel.importRadioButton.text")); // NOI18N
|
||||||
|
importRadioButton.setToolTipText(org.openide.util.NbBundle.getMessage(LogicalImagerPanel.class, "LogicalImagerPanel.importRadioButton.toolTipText")); // NOI18N
|
||||||
|
importRadioButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
importRadioButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
buttonGroup1.add(manualRadioButton);
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(manualRadioButton, org.openide.util.NbBundle.getMessage(LogicalImagerPanel.class, "LogicalImagerPanel.manualRadioButton.text")); // NOI18N
|
||||||
|
manualRadioButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
manualRadioButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
pathTextField.setText(org.openide.util.NbBundle.getMessage(LogicalImagerPanel.class, "LogicalImagerPanel.pathTextField.text")); // NOI18N
|
||||||
|
pathTextField.setDisabledTextColor(java.awt.Color.black);
|
||||||
|
pathTextField.setEnabled(false);
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(selectFolderLabel, org.openide.util.NbBundle.getMessage(LogicalImagerPanel.class, "LogicalImagerPanel.selectFolderLabel.text")); // NOI18N
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(selectDriveLabel, org.openide.util.NbBundle.getMessage(LogicalImagerPanel.class, "LogicalImagerPanel.selectDriveLabel.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(selectDriveLabel, org.openide.util.NbBundle.getMessage(LogicalImagerPanel.class, "LogicalImagerPanel.selectDriveLabel.text")); // NOI18N
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(selectFromDriveLabel, org.openide.util.NbBundle.getMessage(LogicalImagerPanel.class, "LogicalImagerPanel.selectFromDriveLabel.text")); // NOI18N
|
||||||
|
|
||||||
driveList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
|
driveList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
|
||||||
driveList.addMouseListener(new java.awt.event.MouseAdapter() {
|
driveList.addMouseListener(new java.awt.event.MouseAdapter() {
|
||||||
public void mouseClicked(java.awt.event.MouseEvent evt) {
|
public void mouseReleased(java.awt.event.MouseEvent evt) {
|
||||||
driveListMouseClicked(evt);
|
driveListMouseReleased(evt);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
driveList.addKeyListener(new java.awt.event.KeyAdapter() {
|
driveList.addKeyListener(new java.awt.event.KeyAdapter() {
|
||||||
@ -150,14 +171,10 @@ public class LogicalImagerPanel extends JPanel implements DocumentListener {
|
|||||||
});
|
});
|
||||||
driveListScrollPane.setViewportView(driveList);
|
driveListScrollPane.setViewportView(driveList);
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(selectAcquisitionFromDriveLabel, org.openide.util.NbBundle.getMessage(LogicalImagerPanel.class, "LogicalImagerPanel.selectAcquisitionFromDriveLabel.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(refreshButton, org.openide.util.NbBundle.getMessage(LogicalImagerPanel.class, "LogicalImagerPanel.refreshButton.text")); // NOI18N
|
||||||
|
refreshButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(jLabel6, org.openide.util.NbBundle.getMessage(LogicalImagerPanel.class, "LogicalImagerPanel.jLabel6.text")); // NOI18N
|
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(browseButton, org.openide.util.NbBundle.getMessage(LogicalImagerPanel.class, "LogicalImagerPanel.browseButton.text")); // NOI18N
|
|
||||||
browseButton.addActionListener(new java.awt.event.ActionListener() {
|
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
browseButtonActionPerformed(evt);
|
refreshButtonActionPerformed(evt);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -178,8 +195,8 @@ public class LogicalImagerPanel extends JPanel implements DocumentListener {
|
|||||||
imageTable.getTableHeader().setReorderingAllowed(false);
|
imageTable.getTableHeader().setReorderingAllowed(false);
|
||||||
imageTable.setUpdateSelectionOnSort(false);
|
imageTable.setUpdateSelectionOnSort(false);
|
||||||
imageTable.addMouseListener(new java.awt.event.MouseAdapter() {
|
imageTable.addMouseListener(new java.awt.event.MouseAdapter() {
|
||||||
public void mouseClicked(java.awt.event.MouseEvent evt) {
|
public void mouseReleased(java.awt.event.MouseEvent evt) {
|
||||||
imageTableMouseClicked(evt);
|
imageTableMouseReleased(evt);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
imageTable.addKeyListener(new java.awt.event.KeyAdapter() {
|
imageTable.addKeyListener(new java.awt.event.KeyAdapter() {
|
||||||
@ -190,72 +207,94 @@ public class LogicalImagerPanel extends JPanel implements DocumentListener {
|
|||||||
imageScrollPane.setViewportView(imageTable);
|
imageScrollPane.setViewportView(imageTable);
|
||||||
imageTable.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
|
imageTable.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
|
||||||
|
|
||||||
|
jScrollPane1.setBorder(null);
|
||||||
|
|
||||||
|
messageTextArea.setBackground(new java.awt.Color(240, 240, 240));
|
||||||
|
messageTextArea.setColumns(20);
|
||||||
|
messageTextArea.setForeground(java.awt.Color.red);
|
||||||
|
messageTextArea.setLineWrap(true);
|
||||||
|
messageTextArea.setRows(3);
|
||||||
|
messageTextArea.setText(org.openide.util.NbBundle.getMessage(LogicalImagerPanel.class, "LogicalImagerPanel.messageTextArea.text")); // NOI18N
|
||||||
|
messageTextArea.setBorder(null);
|
||||||
|
messageTextArea.setDisabledTextColor(java.awt.Color.red);
|
||||||
|
messageTextArea.setEnabled(false);
|
||||||
|
messageTextArea.setMargin(new java.awt.Insets(0, 0, 0, 0));
|
||||||
|
|
||||||
|
org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, messageTextArea, org.jdesktop.beansbinding.ELProperty.create("false"), messageTextArea, org.jdesktop.beansbinding.BeanProperty.create("editable"));
|
||||||
|
bindingGroup.addBinding(binding);
|
||||||
|
|
||||||
|
jScrollPane1.setViewportView(messageTextArea);
|
||||||
|
|
||||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||||
this.setLayout(layout);
|
this.setLayout(layout);
|
||||||
layout.setHorizontalGroup(
|
layout.setHorizontalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addGap(238, 238, 238)
|
|
||||||
.addComponent(topLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 163, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addGap(0, 0, Short.MAX_VALUE))
|
|
||||||
.addGroup(layout.createSequentialGroup()
|
|
||||||
.addGap(28, 28, 28)
|
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(messageLabel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addGap(10, 10, 10)
|
||||||
|
.addComponent(selectFolderLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 81, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addGap(13, 13, 13)
|
||||||
|
.addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 474, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
|
||||||
.addComponent(jSeparator1, javax.swing.GroupLayout.Alignment.LEADING)
|
.addComponent(jSeparator2, javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addGap(41, 41, 41)
|
||||||
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(driveListScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addComponent(refreshButton))
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
|
.addComponent(imageScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 377, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addGap(20, 20, 20)
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addComponent(selectDriveLabel)
|
.addComponent(manualRadioButton)
|
||||||
.addGap(289, 289, 289))
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
|
||||||
.addComponent(scanButton)
|
|
||||||
.addGap(126, 126, 126)))
|
|
||||||
.addGap(36, 36, 36)
|
|
||||||
.addComponent(browseButton))
|
.addComponent(browseButton))
|
||||||
|
.addComponent(importRadioButton)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addComponent(driveListScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 211, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addGap(21, 21, 21)
|
||||||
.addGap(28, 28, 28)
|
.addComponent(selectDriveLabel)
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGap(113, 113, 113)
|
||||||
.addComponent(selectAcquisitionFromDriveLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 305, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(selectFromDriveLabel))))))
|
||||||
.addComponent(imageScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 346, javax.swing.GroupLayout.PREFERRED_SIZE)))
|
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addGap(346, 346, 346)
|
.addContainerGap()
|
||||||
.addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, 154, javax.swing.GroupLayout.PREFERRED_SIZE))
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 568, javax.swing.GroupLayout.PREFERRED_SIZE)))
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addContainerGap(14, Short.MAX_VALUE))
|
||||||
.addGap(144, 144, 144)
|
|
||||||
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 116, javax.swing.GroupLayout.PREFERRED_SIZE))))
|
|
||||||
.addContainerGap(48, Short.MAX_VALUE))))
|
|
||||||
);
|
);
|
||||||
layout.setVerticalGroup(
|
layout.setVerticalGroup(
|
||||||
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addComponent(topLabel)
|
.addGap(16, 16, 16)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addComponent(importRadioButton)
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
||||||
.addComponent(jLabel1)
|
|
||||||
.addComponent(jLabel6))
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
||||||
.addComponent(scanButton)
|
|
||||||
.addComponent(browseButton))
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
.addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 4, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
||||||
.addComponent(selectDriveLabel)
|
.addComponent(selectDriveLabel)
|
||||||
.addComponent(selectAcquisitionFromDriveLabel))
|
.addComponent(selectFromDriveLabel))
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addComponent(imageScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
|
.addComponent(imageScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
|
||||||
.addComponent(driveListScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 194, Short.MAX_VALUE))
|
.addComponent(driveListScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 186, Short.MAX_VALUE))
|
||||||
.addGap(26, 26, 26)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
.addComponent(messageLabel)
|
.addComponent(refreshButton)
|
||||||
.addGap(154, 154, 154))
|
.addGap(18, 18, 18)
|
||||||
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
|
.addComponent(browseButton)
|
||||||
|
.addComponent(manualRadioButton))
|
||||||
|
.addGap(18, 18, 18)
|
||||||
|
.addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
|
.addComponent(selectFolderLabel)
|
||||||
|
.addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 61, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addGap(6, 6, 6))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
bindingGroup.bind();
|
||||||
}// </editor-fold>//GEN-END:initComponents
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
public static String humanReadableByteCount(long bytes, boolean si) {
|
public static String humanReadableByteCount(long bytes, boolean si) {
|
||||||
@ -268,47 +307,6 @@ public class LogicalImagerPanel extends JPanel implements DocumentListener {
|
|||||||
return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre); //NON-NLS
|
return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre); //NON-NLS
|
||||||
}
|
}
|
||||||
|
|
||||||
@Messages({
|
|
||||||
"LogicalImagerPanel.messageLabel.scanningExternalDrives=Scanning external drives for sparse_image.vhd ...",
|
|
||||||
"LogicalImagerPanel.messageLabel.noExternalDriveFound=No drive found"
|
|
||||||
})
|
|
||||||
private void scanButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_scanButtonActionPerformed
|
|
||||||
// Scan external drives for sparse_image.vhd
|
|
||||||
clearImageTable();
|
|
||||||
setNormalMessage(Bundle.LogicalImagerPanel_messageLabel_scanningExternalDrives());
|
|
||||||
List<String> listData = new ArrayList<>();
|
|
||||||
File[] roots = File.listRoots();
|
|
||||||
int firstRemovableDrive = -1;
|
|
||||||
int i = 0;
|
|
||||||
for (File root : roots) {
|
|
||||||
String description = FileSystemView.getFileSystemView().getSystemTypeDescription(root);
|
|
||||||
long spaceInBytes = root.getTotalSpace();
|
|
||||||
String sizeWithUnit = humanReadableByteCount(spaceInBytes, false);
|
|
||||||
listData.add(root + " (" + description + ") (" + sizeWithUnit + ")");
|
|
||||||
if (firstRemovableDrive == -1) {
|
|
||||||
try {
|
|
||||||
FileStore fileStore = Files.getFileStore(root.toPath());
|
|
||||||
if ((boolean) fileStore.getAttribute("volume:isRemovable")) { //NON-NLS
|
|
||||||
firstRemovableDrive = i;
|
|
||||||
}
|
|
||||||
} catch (IOException ex) {
|
|
||||||
; // skip
|
|
||||||
}
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
driveList.setListData(listData.toArray(new String[0]));
|
|
||||||
if (!listData.isEmpty()) {
|
|
||||||
// auto-select the first external drive, if any
|
|
||||||
driveList.setSelectedIndex(firstRemovableDrive == -1 ? 0 : firstRemovableDrive);
|
|
||||||
driveListMouseClicked(null);
|
|
||||||
driveList.requestFocusInWindow();
|
|
||||||
} else {
|
|
||||||
setErrorMessage(Bundle.LogicalImagerPanel_messageLabel_noExternalDriveFound());
|
|
||||||
}
|
|
||||||
firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), true, false);
|
|
||||||
}//GEN-LAST:event_scanButtonActionPerformed
|
|
||||||
|
|
||||||
@Messages({
|
@Messages({
|
||||||
"# {0} - sparseImageDirectory",
|
"# {0} - sparseImageDirectory",
|
||||||
"# {1} - image",
|
"# {1} - image",
|
||||||
@ -333,7 +331,7 @@ public class LogicalImagerPanel extends JPanel implements DocumentListener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
choosenImageDirPath = Paths.get(path);
|
choosenImageDirPath = Paths.get(path);
|
||||||
setNormalMessage(SELECTED_IMAGE + " " + path);
|
setNormalMessage(path);
|
||||||
firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true);
|
firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true);
|
||||||
} else {
|
} else {
|
||||||
setErrorMessage(Bundle.LogicalImagerPanel_messageLabel_directoryFormatInvalid(path));
|
setErrorMessage(Bundle.LogicalImagerPanel_messageLabel_directoryFormatInvalid(path));
|
||||||
@ -348,7 +346,7 @@ public class LogicalImagerPanel extends JPanel implements DocumentListener {
|
|||||||
int index = imageTable.getSelectedRow();
|
int index = imageTable.getSelectedRow();
|
||||||
if (index != -1) {
|
if (index != -1) {
|
||||||
choosenImageDirPath = Paths.get((String) imageTableModel.getValueAt(index, 2));
|
choosenImageDirPath = Paths.get((String) imageTableModel.getValueAt(index, 2));
|
||||||
setNormalMessage(SELECTED_IMAGE + " " + choosenImageDirPath.toString());
|
setNormalMessage(choosenImageDirPath.toString());
|
||||||
firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true);
|
firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true);
|
||||||
} else {
|
} else {
|
||||||
choosenImageDirPath = null;
|
choosenImageDirPath = null;
|
||||||
@ -357,10 +355,6 @@ public class LogicalImagerPanel extends JPanel implements DocumentListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void imageTableMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_imageTableMouseClicked
|
|
||||||
imageTableSelect();
|
|
||||||
}//GEN-LAST:event_imageTableMouseClicked
|
|
||||||
|
|
||||||
private void driveListSelect() {
|
private void driveListSelect() {
|
||||||
String selectedStr = driveList.getSelectedValue();
|
String selectedStr = driveList.getSelectedValue();
|
||||||
if (selectedStr == null) {
|
if (selectedStr == null) {
|
||||||
@ -398,7 +392,7 @@ public class LogicalImagerPanel extends JPanel implements DocumentListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
selectAcquisitionFromDriveLabel.setText(Bundle.LogicalImagerPanel_selectAcquisitionFromDriveLabel_text()
|
selectFromDriveLabel.setText(Bundle.LogicalImagerPanel_selectAcquisitionFromDriveLabel_text()
|
||||||
+ " " + driveLetter);
|
+ " " + driveLetter);
|
||||||
imageTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
|
imageTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
|
||||||
imageTable.setModel(imageTableModel);
|
imageTable.setModel(imageTableModel);
|
||||||
@ -411,6 +405,10 @@ public class LogicalImagerPanel extends JPanel implements DocumentListener {
|
|||||||
choosenImageDirPath = null;
|
choosenImageDirPath = null;
|
||||||
setErrorMessage(DRIVE_HAS_NO_IMAGES);
|
setErrorMessage(DRIVE_HAS_NO_IMAGES);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
clearImageTable();
|
||||||
|
choosenImageDirPath = null;
|
||||||
|
setErrorMessage(DRIVE_HAS_NO_IMAGES);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -421,13 +419,14 @@ public class LogicalImagerPanel extends JPanel implements DocumentListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setErrorMessage(String msg) {
|
private void setErrorMessage(String msg) {
|
||||||
messageLabel.setForeground(Color.red);
|
messageTextArea.setForeground(Color.red);
|
||||||
messageLabel.setText(msg);
|
messageTextArea.setText(msg);
|
||||||
|
pathTextField.setText("");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setNormalMessage(String msg) {
|
private void setNormalMessage(String msg) {
|
||||||
messageLabel.setForeground(Color.black);
|
pathTextField.setText(msg);
|
||||||
messageLabel.setText(msg);
|
messageTextArea.setText("");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void clearImageTable() {
|
private void clearImageTable() {
|
||||||
@ -436,43 +435,138 @@ public class LogicalImagerPanel extends JPanel implements DocumentListener {
|
|||||||
fixImageTableColumnWidth();
|
fixImageTableColumnWidth();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void driveListMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_driveListMouseClicked
|
private void toggleMouseAndKeyListeners(Component component, boolean isEnable) {
|
||||||
driveListSelect();
|
component.setEnabled(isEnable);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void manualRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_manualRadioButtonActionPerformed
|
||||||
|
browseButton.setEnabled(true);
|
||||||
|
|
||||||
|
// disable import panel
|
||||||
|
toggleMouseAndKeyListeners(driveList, false);
|
||||||
|
toggleMouseAndKeyListeners(driveListScrollPane, false);
|
||||||
|
toggleMouseAndKeyListeners(imageScrollPane, false);
|
||||||
|
toggleMouseAndKeyListeners(imageTable, false);
|
||||||
|
|
||||||
|
refreshButton.setEnabled(false);
|
||||||
|
|
||||||
|
choosenImageDirPath = null;
|
||||||
|
setNormalMessage("");
|
||||||
firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), true, false);
|
firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), true, false);
|
||||||
}//GEN-LAST:event_driveListMouseClicked
|
}//GEN-LAST:event_manualRadioButtonActionPerformed
|
||||||
|
|
||||||
|
private void importRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_importRadioButtonActionPerformed
|
||||||
|
browseButton.setEnabled(false);
|
||||||
|
|
||||||
|
toggleMouseAndKeyListeners(driveList, true);
|
||||||
|
toggleMouseAndKeyListeners(driveListScrollPane, true);
|
||||||
|
toggleMouseAndKeyListeners(imageScrollPane, true);
|
||||||
|
toggleMouseAndKeyListeners(imageTable, true);
|
||||||
|
|
||||||
|
refreshButton.setEnabled(true);
|
||||||
|
|
||||||
|
choosenImageDirPath = null;
|
||||||
|
setNormalMessage("");
|
||||||
|
refreshButton.doClick();
|
||||||
|
}//GEN-LAST:event_importRadioButtonActionPerformed
|
||||||
|
|
||||||
|
@Messages({
|
||||||
|
"LogicalImagerPanel.messageLabel.scanningExternalDrives=Scanning external drives for sparse_image.vhd ...",
|
||||||
|
"LogicalImagerPanel.messageLabel.noExternalDriveFound=No drive found"
|
||||||
|
})
|
||||||
|
private void refreshButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_refreshButtonActionPerformed
|
||||||
|
// Scan external drives for sparse_image.vhd
|
||||||
|
clearImageTable();
|
||||||
|
setNormalMessage(Bundle.LogicalImagerPanel_messageLabel_scanningExternalDrives());
|
||||||
|
List<String> listData = new ArrayList<>();
|
||||||
|
File[] roots = File.listRoots();
|
||||||
|
int firstRemovableDrive = -1;
|
||||||
|
int i = 0;
|
||||||
|
for (File root : roots) {
|
||||||
|
String description = FileSystemView.getFileSystemView().getSystemTypeDescription(root);
|
||||||
|
long spaceInBytes = root.getTotalSpace();
|
||||||
|
String sizeWithUnit = humanReadableByteCount(spaceInBytes, false);
|
||||||
|
listData.add(root + " (" + description + ") (" + sizeWithUnit + ")");
|
||||||
|
if (firstRemovableDrive == -1) {
|
||||||
|
try {
|
||||||
|
FileStore fileStore = Files.getFileStore(root.toPath());
|
||||||
|
if ((boolean) fileStore.getAttribute("volume:isRemovable")) { //NON-NLS
|
||||||
|
firstRemovableDrive = i;
|
||||||
|
}
|
||||||
|
} catch (IOException ex) {
|
||||||
|
; // skip
|
||||||
|
}
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
driveList.setListData(listData.toArray(new String[0]));
|
||||||
|
if (!listData.isEmpty()) {
|
||||||
|
// auto-select the first external drive, if any
|
||||||
|
driveList.setSelectedIndex(firstRemovableDrive == -1 ? 0 : firstRemovableDrive);
|
||||||
|
driveListMouseReleased(null);
|
||||||
|
driveList.requestFocusInWindow();
|
||||||
|
} else {
|
||||||
|
setErrorMessage(Bundle.LogicalImagerPanel_messageLabel_noExternalDriveFound());
|
||||||
|
}
|
||||||
|
firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), true, false);
|
||||||
|
}//GEN-LAST:event_refreshButtonActionPerformed
|
||||||
|
|
||||||
private void driveListKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_driveListKeyReleased
|
private void driveListKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_driveListKeyReleased
|
||||||
|
if (importRadioButton.isSelected()) {
|
||||||
driveListSelect();
|
driveListSelect();
|
||||||
firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), true, false);
|
firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), true, false);
|
||||||
|
}
|
||||||
}//GEN-LAST:event_driveListKeyReleased
|
}//GEN-LAST:event_driveListKeyReleased
|
||||||
|
|
||||||
private void imageTableKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_imageTableKeyReleased
|
private void imageTableKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_imageTableKeyReleased
|
||||||
|
if (importRadioButton.isSelected()) {
|
||||||
imageTableSelect();
|
imageTableSelect();
|
||||||
firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), true, false);
|
}
|
||||||
}//GEN-LAST:event_imageTableKeyReleased
|
}//GEN-LAST:event_imageTableKeyReleased
|
||||||
|
|
||||||
|
private void imageTableMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_imageTableMouseReleased
|
||||||
|
if (importRadioButton.isSelected()) {
|
||||||
|
imageTableSelect();
|
||||||
|
}
|
||||||
|
}//GEN-LAST:event_imageTableMouseReleased
|
||||||
|
|
||||||
|
private void driveListMouseReleased(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_driveListMouseReleased
|
||||||
|
if (importRadioButton.isSelected()) {
|
||||||
|
driveListSelect();
|
||||||
|
firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), true, false);
|
||||||
|
}
|
||||||
|
}//GEN-LAST:event_driveListMouseReleased
|
||||||
|
|
||||||
|
|
||||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
private javax.swing.JButton browseButton;
|
private javax.swing.JButton browseButton;
|
||||||
|
private javax.swing.ButtonGroup buttonGroup1;
|
||||||
private javax.swing.JList<String> driveList;
|
private javax.swing.JList<String> driveList;
|
||||||
private javax.swing.JScrollPane driveListScrollPane;
|
private javax.swing.JScrollPane driveListScrollPane;
|
||||||
private javax.swing.JScrollPane imageScrollPane;
|
private javax.swing.JScrollPane imageScrollPane;
|
||||||
private javax.swing.JTable imageTable;
|
private javax.swing.JTable imageTable;
|
||||||
private javax.swing.JLabel jLabel1;
|
private javax.swing.JRadioButton importRadioButton;
|
||||||
private javax.swing.JLabel jLabel6;
|
private javax.swing.JScrollPane jScrollPane1;
|
||||||
private javax.swing.JSeparator jSeparator1;
|
private javax.swing.JSeparator jSeparator2;
|
||||||
private javax.swing.JLabel messageLabel;
|
private javax.swing.JRadioButton manualRadioButton;
|
||||||
private javax.swing.JButton scanButton;
|
private javax.swing.JTextArea messageTextArea;
|
||||||
private javax.swing.JLabel selectAcquisitionFromDriveLabel;
|
private javax.swing.JTextField pathTextField;
|
||||||
|
private javax.swing.JButton refreshButton;
|
||||||
private javax.swing.JLabel selectDriveLabel;
|
private javax.swing.JLabel selectDriveLabel;
|
||||||
private javax.swing.JLabel topLabel;
|
private javax.swing.JLabel selectFolderLabel;
|
||||||
|
private javax.swing.JLabel selectFromDriveLabel;
|
||||||
|
private org.jdesktop.beansbinding.BindingGroup bindingGroup;
|
||||||
// End of variables declaration//GEN-END:variables
|
// End of variables declaration//GEN-END:variables
|
||||||
|
|
||||||
public void reset() {
|
public void reset() {
|
||||||
//reset the UI elements to default
|
//reset the UI elements to default
|
||||||
choosenImageDirPath = null;
|
choosenImageDirPath = null;
|
||||||
|
setNormalMessage("");
|
||||||
driveList.setListData(EMPTY_LIST_DATA);
|
driveList.setListData(EMPTY_LIST_DATA);
|
||||||
clearImageTable();
|
clearImageTable();
|
||||||
setNormalMessage(Bundle.LogicalImagerPanel_messageLabel_clickScanOrBrowse());
|
if (importRadioButton.isSelected()) {
|
||||||
|
refreshButton.doClick();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -488,10 +582,6 @@ public class LogicalImagerPanel extends JPanel implements DocumentListener {
|
|||||||
return choosenImageDirPath;
|
return choosenImageDirPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMessageLabel(String message) {
|
|
||||||
messageLabel.setText(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void insertUpdate(DocumentEvent e) {
|
public void insertUpdate(DocumentEvent e) {
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,13 @@
|
|||||||
AbstractCommonFilesMetadataBuilder.buildCategorySelectionString.all=All File Categories
|
AbstractCommonFilesMetadataBuilder.buildCategorySelectionString.all=All File Categories
|
||||||
AbstractCommonFilesMetadataBuilder.buildCategorySelectionString.doc=Documents
|
AbstractCommonFilesMetadataBuilder.buildCategorySelectionString.doc=Documents
|
||||||
AbstractCommonFilesMetadataBuilder.buildCategorySelectionString.media=Media
|
AbstractCommonFilesMetadataBuilder.buildCategorySelectionString.media=Media
|
||||||
|
# {0} - threshold percent
|
||||||
AbstractCommonFilesMetadataBuilder.getPercentFilter.thresholdPercent=, Threshold {0}%
|
AbstractCommonFilesMetadataBuilder.getPercentFilter.thresholdPercent=, Threshold {0}%
|
||||||
|
# {0} - attr type
|
||||||
|
# {1} - threshold string
|
||||||
AllInterCaseCommonAttributeSearcher.buildTabTitle.titleInterAll=Common Properties (All Central Repository Cases, {0}{1})
|
AllInterCaseCommonAttributeSearcher.buildTabTitle.titleInterAll=Common Properties (All Central Repository Cases, {0}{1})
|
||||||
|
# {0} - build category
|
||||||
|
# {1} - threshold string
|
||||||
AllIntraCaseCommonAttributeSearcher.buildTabTitle.titleIntraAll=Common Properties (All Data Sources, {0}{1})
|
AllIntraCaseCommonAttributeSearcher.buildTabTitle.titleIntraAll=Common Properties (All Data Sources, {0}{1})
|
||||||
# {0} - number of datasources
|
# {0} - number of datasources
|
||||||
CommonAttributePanel.dataSourcesLabel.text=The current Central Repository contains {0} data source(s).
|
CommonAttributePanel.dataSourcesLabel.text=The current Central Repository contains {0} data source(s).
|
||||||
@ -98,7 +103,13 @@ CommonAttributePanel.organizeByCountRadio.text=Number of occurrences
|
|||||||
CommonAttributePanel.caseResultsRadioButton.text=Case
|
CommonAttributePanel.caseResultsRadioButton.text=Case
|
||||||
CommonAttributePanel.countResultsRadioButton.text=Number of data sources
|
CommonAttributePanel.countResultsRadioButton.text=Number of data sources
|
||||||
CommonAttributePanel.displayResultsLabel.text_2=Display results organized by:
|
CommonAttributePanel.displayResultsLabel.text_2=Display results organized by:
|
||||||
|
# {0} - case name
|
||||||
|
# {1} - attr type
|
||||||
|
# {2} - threshold string
|
||||||
SingleInterCaseCommonAttributeSearcher.buildTabTitle.titleInterSingle=Common Properties (Central Repository Case: {0}, {1}{2})
|
SingleInterCaseCommonAttributeSearcher.buildTabTitle.titleInterSingle=Common Properties (Central Repository Case: {0}, {1}{2})
|
||||||
|
# {0} - data source name
|
||||||
|
# {1} - build category
|
||||||
|
# {2} - threshold string
|
||||||
SingleIntraCaseCommonAttributeSearcher.buildTabTitle.titleIntraSingle=Common Properties (Data Source: {0}, {1}{2})
|
SingleIntraCaseCommonAttributeSearcher.buildTabTitle.titleIntraSingle=Common Properties (Data Source: {0}, {1}{2})
|
||||||
UserInputErrorManager.categories=No file categories are included in the search.
|
UserInputErrorManager.categories=No file categories are included in the search.
|
||||||
UserInputErrorManager.frequency=Invalid Frequency Percentage: 0 < % < 100.
|
UserInputErrorManager.frequency=Invalid Frequency Percentage: 0 < % < 100.
|
||||||
|
BIN
Core/src/org/sleuthkit/autopsy/communications/images/nail.png
Executable file
BIN
Core/src/org/sleuthkit/autopsy/communications/images/nail.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 202 B |
BIN
Core/src/org/sleuthkit/autopsy/communications/images/screw.png
Executable file
BIN
Core/src/org/sleuthkit/autopsy/communications/images/screw.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 217 B |
BIN
Core/src/org/sleuthkit/autopsy/communications/images/threaded.png
Executable file
BIN
Core/src/org/sleuthkit/autopsy/communications/images/threaded.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 263 B |
BIN
Core/src/org/sleuthkit/autopsy/communications/images/unthreaded.png
Executable file
BIN
Core/src/org/sleuthkit/autopsy/communications/images/unthreaded.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 199 B |
@ -15,11 +15,9 @@ ThreadRootMessagePanel.showAllCheckBox.text=Show All Messages
|
|||||||
ThreadPane.backButton.text=<---
|
ThreadPane.backButton.text=<---
|
||||||
SummaryViewer.caseReferencesPanel.border.title=Other Occurrences
|
SummaryViewer.caseReferencesPanel.border.title=Other Occurrences
|
||||||
SummaryViewer.fileReferencesPanel.border.title=File References in Current Case
|
SummaryViewer.fileReferencesPanel.border.title=File References in Current Case
|
||||||
MessageViewer.threadsLabel.text=Threads
|
MessageViewer.threadsLabel.text=Select a Thread to View
|
||||||
MessageViewer.threadNameLabel.text=<threadName>
|
MessageViewer.threadNameLabel.text=<threadName>
|
||||||
MessageViewer.showingMessagesLabel.text=Showing Messages for Thread:
|
MessageViewer.showingMessagesLabel.text=Showing Messages for Thread:
|
||||||
MessageViewer.messagesLabel.text=Messages
|
|
||||||
MessageViewer.backButton.AccessibleContext.accessibleDescription=
|
MessageViewer.backButton.AccessibleContext.accessibleDescription=
|
||||||
MessageViewer.backButton.text=
|
MessageViewer.backButton.text=Threads
|
||||||
MessageViewer.showMessagesButton.text=
|
MessageViewer.showAllButton.text=All Messages
|
||||||
MessageViewer.viewMessageLabel.text=View Messages:
|
|
||||||
|
@ -19,7 +19,8 @@ MessageNode_Node_Property_Subject=Subject
|
|||||||
MessageNode_Node_Property_To=To
|
MessageNode_Node_Property_To=To
|
||||||
MessageNode_Node_Property_Type=Type
|
MessageNode_Node_Property_Type=Type
|
||||||
MessageViewer_columnHeader_Attms=Attachments
|
MessageViewer_columnHeader_Attms=Attachments
|
||||||
MessageViewer_columnHeader_Date=Date
|
MessageViewer_columnHeader_Date=Data
|
||||||
|
MessageViewer_columnHeader_EarlyDate=Earliest Message
|
||||||
MessageViewer_columnHeader_From=From
|
MessageViewer_columnHeader_From=From
|
||||||
MessageViewer_columnHeader_Subject=Subject
|
MessageViewer_columnHeader_Subject=Subject
|
||||||
MessageViewer_columnHeader_To=To
|
MessageViewer_columnHeader_To=To
|
||||||
@ -50,11 +51,9 @@ ThreadRootMessagePanel.showAllCheckBox.text=Show All Messages
|
|||||||
ThreadPane.backButton.text=<---
|
ThreadPane.backButton.text=<---
|
||||||
SummaryViewer.caseReferencesPanel.border.title=Other Occurrences
|
SummaryViewer.caseReferencesPanel.border.title=Other Occurrences
|
||||||
SummaryViewer.fileReferencesPanel.border.title=File References in Current Case
|
SummaryViewer.fileReferencesPanel.border.title=File References in Current Case
|
||||||
MessageViewer.threadsLabel.text=Threads
|
MessageViewer.threadsLabel.text=Select a Thread to View
|
||||||
MessageViewer.threadNameLabel.text=<threadName>
|
MessageViewer.threadNameLabel.text=<threadName>
|
||||||
MessageViewer.showingMessagesLabel.text=Showing Messages for Thread:
|
MessageViewer.showingMessagesLabel.text=Showing Messages for Thread:
|
||||||
MessageViewer.messagesLabel.text=Messages
|
|
||||||
MessageViewer.backButton.AccessibleContext.accessibleDescription=
|
MessageViewer.backButton.AccessibleContext.accessibleDescription=
|
||||||
MessageViewer.backButton.text=
|
MessageViewer.backButton.text=Threads
|
||||||
MessageViewer.showMessagesButton.text=
|
MessageViewer.showAllButton.text=All Messages
|
||||||
MessageViewer.viewMessageLabel.text=View Messages:
|
|
||||||
|
@ -25,7 +25,6 @@ import org.apache.commons.lang3.StringUtils;
|
|||||||
import org.openide.nodes.Sheet;
|
import org.openide.nodes.Sheet;
|
||||||
import org.openide.util.NbBundle.Messages;
|
import org.openide.util.NbBundle.Messages;
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
import org.sleuthkit.autopsy.datamodel.BlackboardArtifactNode;
|
|
||||||
import org.sleuthkit.autopsy.datamodel.NodeProperty;
|
import org.sleuthkit.autopsy.datamodel.NodeProperty;
|
||||||
import org.sleuthkit.datamodel.BlackboardArtifact;
|
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||||
import org.sleuthkit.datamodel.BlackboardAttribute;
|
import org.sleuthkit.datamodel.BlackboardAttribute;
|
||||||
@ -41,6 +40,7 @@ import static org.sleuthkit.datamodel.BlackboardAttribute.TSK_BLACKBOARD_ATTRIBU
|
|||||||
import org.sleuthkit.datamodel.TimeUtilities;
|
import org.sleuthkit.datamodel.TimeUtilities;
|
||||||
import org.sleuthkit.datamodel.TskCoreException;
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
import org.sleuthkit.autopsy.communications.Utils;
|
import org.sleuthkit.autopsy.communications.Utils;
|
||||||
|
import org.sleuthkit.autopsy.datamodel.BlackboardArtifactNode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wraps a BlackboardArtifact as an AbstractNode for use in an OutlookView
|
* Wraps a BlackboardArtifact as an AbstractNode for use in an OutlookView
|
||||||
|
@ -28,71 +28,44 @@
|
|||||||
|
|
||||||
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
|
<Layout class="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout"/>
|
||||||
<SubComponents>
|
<SubComponents>
|
||||||
<Component class="org.sleuthkit.autopsy.communications.relationships.OutlineViewPanel" name="rootTablePane">
|
|
||||||
<Constraints>
|
|
||||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
|
||||||
<GridBagConstraints gridX="0" gridY="4" gridWidth="4" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="15" insetsBottom="15" insetsRight="15" anchor="18" weightX="0.0" weightY="1.0"/>
|
|
||||||
</Constraint>
|
|
||||||
</Constraints>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JLabel" name="threadsLabel">
|
<Component class="javax.swing.JLabel" name="threadsLabel">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
|
||||||
<Font name="Tahoma" size="24" style="0"/>
|
|
||||||
</Property>
|
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="MessageViewer.threadsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="MessageViewer.threadsLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
<Constraints>
|
<Constraints>
|
||||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||||
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="3" fill="2" ipadX="0" ipadY="0" insetsTop="15" insetsLeft="15" insetsBottom="0" insetsRight="0" anchor="18" weightX="1.0" weightY="0.0"/>
|
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="15" insetsLeft="15" insetsBottom="9" insetsRight="0" anchor="18" weightX="1.0" weightY="0.0"/>
|
||||||
</Constraint>
|
</Constraint>
|
||||||
</Constraints>
|
</Constraints>
|
||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JComboBox" name="viewMessageComboBox">
|
<Component class="javax.swing.JButton" name="showAllButton">
|
||||||
<Events>
|
|
||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="viewMessageComboBoxActionPerformed"/>
|
|
||||||
</Events>
|
|
||||||
<AuxValues>
|
|
||||||
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="<VIEW_MESSAGE_TYPE>"/>
|
|
||||||
</AuxValues>
|
|
||||||
<Constraints>
|
|
||||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
|
||||||
<GridBagConstraints gridX="2" gridY="0" gridWidth="1" gridHeight="4" fill="0" ipadX="0" ipadY="0" insetsTop="15" insetsLeft="0" insetsBottom="0" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
|
|
||||||
</Constraint>
|
|
||||||
</Constraints>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JLabel" name="viewMessageLabel">
|
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="MessageViewer.viewMessageLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="MessageViewer.showAllButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="showAllButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
<Constraints>
|
<Constraints>
|
||||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||||
<GridBagConstraints gridX="1" gridY="0" gridWidth="1" gridHeight="2" fill="0" ipadX="0" ipadY="0" insetsTop="15" insetsLeft="0" insetsBottom="0" insetsRight="5" anchor="13" weightX="0.0" weightY="0.0"/>
|
<GridBagConstraints gridX="0" gridY="2" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="15" insetsBottom="15" insetsRight="0" anchor="17" weightX="0.0" weightY="0.0"/>
|
||||||
</Constraint>
|
</Constraint>
|
||||||
</Constraints>
|
</Constraints>
|
||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JButton" name="showMessagesButton">
|
<Component class="org.sleuthkit.autopsy.communications.relationships.OutlineViewPanel" name="rootTablePane">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
|
||||||
<Image iconType="3" name="/org/sleuthkit/autopsy/timeline/images/btn_step_forward.png"/>
|
|
||||||
</Property>
|
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="MessageViewer.showMessagesButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
||||||
<Border info="null"/>
|
<Border info="org.netbeans.modules.form.compat2.border.LineBorderInfo">
|
||||||
|
<LineBorder/>
|
||||||
|
</Border>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
<Events>
|
|
||||||
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="showMessagesButtonActionPerformed"/>
|
|
||||||
</Events>
|
|
||||||
<Constraints>
|
<Constraints>
|
||||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||||
<GridBagConstraints gridX="3" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="15" insetsLeft="5" insetsBottom="0" insetsRight="15" anchor="18" weightX="0.0" weightY="0.0"/>
|
<GridBagConstraints gridX="0" gridY="1" gridWidth="2" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="15" insetsBottom="9" insetsRight="15" anchor="18" weightX="1.0" weightY="1.0"/>
|
||||||
</Constraint>
|
</Constraint>
|
||||||
</Constraints>
|
</Constraints>
|
||||||
</Component>
|
</Component>
|
||||||
@ -113,22 +86,18 @@
|
|||||||
</AuxValues>
|
</AuxValues>
|
||||||
<Constraints>
|
<Constraints>
|
||||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||||
<GridBagConstraints gridX="0" gridY="3" gridWidth="5" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="15" insetsBottom="0" insetsRight="15" anchor="18" weightX="1.0" weightY="1.0"/>
|
<GridBagConstraints gridX="0" gridY="3" gridWidth="3" gridHeight="1" fill="1" ipadX="0" ipadY="0" insetsTop="0" insetsLeft="15" insetsBottom="0" insetsRight="15" anchor="18" weightX="1.0" weightY="1.0"/>
|
||||||
</Constraint>
|
</Constraint>
|
||||||
</Constraints>
|
</Constraints>
|
||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JButton" name="backButton">
|
<Component class="javax.swing.JButton" name="backButton">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
<Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor">
|
||||||
<Image iconType="3" name="/org/sleuthkit/autopsy/timeline/images/btn_step_back.png"/>
|
<Image iconType="3" name="/org/sleuthkit/autopsy/timeline/images/arrow-180.png"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="MessageViewer.backButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="MessageViewer.backButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
<Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor">
|
|
||||||
<Border info="null"/>
|
|
||||||
</Property>
|
|
||||||
<Property name="borderPainted" type="boolean" value="false"/>
|
|
||||||
</Properties>
|
</Properties>
|
||||||
<AccessibilityProperties>
|
<AccessibilityProperties>
|
||||||
<Property name="AccessibleContext.accessibleDescription" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="AccessibleContext.accessibleDescription" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
@ -140,22 +109,7 @@
|
|||||||
</Events>
|
</Events>
|
||||||
<Constraints>
|
<Constraints>
|
||||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||||
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="16" insetsLeft="15" insetsBottom="0" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
|
<GridBagConstraints gridX="2" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="9" insetsLeft="0" insetsBottom="9" insetsRight="15" anchor="13" weightX="1.0" weightY="0.0"/>
|
||||||
</Constraint>
|
|
||||||
</Constraints>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JLabel" name="messagesLabel">
|
|
||||||
<Properties>
|
|
||||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor">
|
|
||||||
<Font name="Tahoma" size="24" style="0"/>
|
|
||||||
</Property>
|
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/communications/relationships/Bundle.properties" key="MessageViewer.messagesLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
<Constraints>
|
|
||||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
|
||||||
<GridBagConstraints gridX="0" gridY="1" gridWidth="2" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="15" insetsBottom="0" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
|
|
||||||
</Constraint>
|
</Constraint>
|
||||||
</Constraints>
|
</Constraints>
|
||||||
</Component>
|
</Component>
|
||||||
@ -167,7 +121,7 @@
|
|||||||
</Properties>
|
</Properties>
|
||||||
<Constraints>
|
<Constraints>
|
||||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||||
<GridBagConstraints gridX="0" gridY="2" gridWidth="3" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="15" insetsBottom="5" insetsRight="0" anchor="18" weightX="0.0" weightY="0.0"/>
|
<GridBagConstraints gridX="0" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="9" insetsLeft="15" insetsBottom="5" insetsRight="0" anchor="17" weightX="0.0" weightY="0.0"/>
|
||||||
</Constraint>
|
</Constraint>
|
||||||
</Constraints>
|
</Constraints>
|
||||||
</Component>
|
</Component>
|
||||||
@ -179,7 +133,7 @@
|
|||||||
</Properties>
|
</Properties>
|
||||||
<Constraints>
|
<Constraints>
|
||||||
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
<Constraint layoutClass="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout" value="org.netbeans.modules.form.compat2.layouts.DesignGridBagLayout$GridBagConstraintsDescription">
|
||||||
<GridBagConstraints gridX="3" gridY="2" gridWidth="1" gridHeight="1" fill="2" ipadX="0" ipadY="0" insetsTop="5" insetsLeft="5" insetsBottom="5" insetsRight="15" anchor="18" weightX="1.0" weightY="0.0"/>
|
<GridBagConstraints gridX="1" gridY="0" gridWidth="1" gridHeight="1" fill="0" ipadX="0" ipadY="0" insetsTop="9" insetsLeft="5" insetsBottom="5" insetsRight="15" anchor="17" weightX="0.0" weightY="0.0"/>
|
||||||
</Constraint>
|
</Constraint>
|
||||||
</Constraints>
|
</Constraints>
|
||||||
</Component>
|
</Component>
|
||||||
|
@ -24,11 +24,13 @@ import java.awt.KeyboardFocusManager;
|
|||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.beans.PropertyChangeEvent;
|
import java.beans.PropertyChangeEvent;
|
||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
|
import java.beans.PropertyVetoException;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import javax.swing.AbstractAction;
|
import javax.swing.AbstractAction;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.ListSelectionModel;
|
||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
import static javax.swing.SwingUtilities.isDescendingFrom;
|
import static javax.swing.SwingUtilities.isDescendingFrom;
|
||||||
import org.netbeans.swing.outline.DefaultOutlineModel;
|
import org.netbeans.swing.outline.DefaultOutlineModel;
|
||||||
@ -40,6 +42,7 @@ import org.openide.nodes.Children;
|
|||||||
import org.openide.nodes.Node;
|
import org.openide.nodes.Node;
|
||||||
import org.openide.nodes.Node.Property;
|
import org.openide.nodes.Node.Property;
|
||||||
import org.openide.nodes.Node.PropertySet;
|
import org.openide.nodes.Node.PropertySet;
|
||||||
|
import org.openide.util.Exceptions;
|
||||||
import org.openide.util.Lookup;
|
import org.openide.util.Lookup;
|
||||||
import org.openide.util.NbBundle.Messages;
|
import org.openide.util.NbBundle.Messages;
|
||||||
import org.sleuthkit.autopsy.communications.ModifiableProxyLookup;
|
import org.sleuthkit.autopsy.communications.ModifiableProxyLookup;
|
||||||
@ -47,7 +50,6 @@ import org.sleuthkit.autopsy.corecomponents.TableFilterNode;
|
|||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
import org.sleuthkit.autopsy.directorytree.DataResultFilterNode;
|
import org.sleuthkit.autopsy.directorytree.DataResultFilterNode;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
@ -68,17 +70,15 @@ public class MessageViewer extends JPanel implements RelationshipsViewer{
|
|||||||
@Messages({
|
@Messages({
|
||||||
"MessageViewer_tabTitle=Messages",
|
"MessageViewer_tabTitle=Messages",
|
||||||
"MessageViewer_columnHeader_From=From",
|
"MessageViewer_columnHeader_From=From",
|
||||||
|
"MessageViewer_columnHeader_Date=Data",
|
||||||
"MessageViewer_columnHeader_To=To",
|
"MessageViewer_columnHeader_To=To",
|
||||||
"MessageViewer_columnHeader_Date=Date",
|
"MessageViewer_columnHeader_EarlyDate=Earliest Message",
|
||||||
"MessageViewer_columnHeader_Subject=Subject",
|
"MessageViewer_columnHeader_Subject=Subject",
|
||||||
"MessageViewer_columnHeader_Attms=Attachments",
|
"MessageViewer_columnHeader_Attms=Attachments",
|
||||||
"MessageViewer_no_messages=<No messages found for selected account>",
|
"MessageViewer_no_messages=<No messages found for selected account>",
|
||||||
"MessageViewer_viewMessage_all=All",
|
"MessageViewer_viewMessage_all=All",
|
||||||
"MessageViewer_viewMessage_selected=Selected",
|
"MessageViewer_viewMessage_selected=Selected",
|
||||||
"MessageViewer_viewMessage_unthreaded=Unthreaded",
|
"MessageViewer_viewMessage_unthreaded=Unthreaded",})
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates new form MessageViewer2
|
* Creates new form MessageViewer2
|
||||||
@ -108,7 +108,6 @@ public class MessageViewer extends JPanel implements RelationshipsViewer{
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
rootTablePane.getExplorerManager().setRootContext(
|
rootTablePane.getExplorerManager().setRootContext(
|
||||||
new TableFilterNode(
|
new TableFilterNode(
|
||||||
new DataResultFilterNode(
|
new DataResultFilterNode(
|
||||||
@ -119,35 +118,22 @@ public class MessageViewer extends JPanel implements RelationshipsViewer{
|
|||||||
|
|
||||||
Outline outline = rootTablePane.getOutlineView().getOutline();
|
Outline outline = rootTablePane.getOutlineView().getOutline();
|
||||||
rootTablePane.getOutlineView().setPropertyColumns(
|
rootTablePane.getOutlineView().setPropertyColumns(
|
||||||
"From", Bundle.MessageViewer_columnHeader_From(),
|
"Date", Bundle.MessageViewer_columnHeader_EarlyDate(),
|
||||||
"To", Bundle.MessageViewer_columnHeader_To(),
|
"Subject", Bundle.MessageViewer_columnHeader_Subject()
|
||||||
"Date", Bundle.MessageViewer_columnHeader_Date(),
|
|
||||||
"Subject", Bundle.MessageViewer_columnHeader_Subject(),
|
|
||||||
"Attms", Bundle.MessageViewer_columnHeader_Attms()
|
|
||||||
);
|
);
|
||||||
outline.setRootVisible(false);
|
outline.setRootVisible(false);
|
||||||
((DefaultOutlineModel) outline.getOutlineModel()).setNodesColumnLabel("Type");
|
((DefaultOutlineModel) outline.getOutlineModel()).setNodesColumnLabel("Type");
|
||||||
|
outline.setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
|
||||||
|
|
||||||
rootTablePane.getExplorerManager().addPropertyChangeListener((PropertyChangeEvent evt) -> {
|
rootTablePane.getExplorerManager().addPropertyChangeListener((PropertyChangeEvent evt) -> {
|
||||||
if (evt.getPropertyName().equals(ExplorerManager.PROP_SELECTED_NODES)) {
|
if (evt.getPropertyName().equals(ExplorerManager.PROP_SELECTED_NODES)) {
|
||||||
final Node[] nodes = rootTablePane.getExplorerManager().getSelectedNodes();
|
showSelectedThread();
|
||||||
|
|
||||||
switch((VIEW_MESSAGE_TYPE)viewMessageComboBox.getSelectedItem()) {
|
|
||||||
case ALL:
|
|
||||||
showMessagesButton.setEnabled((nodes != null && nodes.length > 0));
|
|
||||||
break;
|
|
||||||
case SELECTED:
|
|
||||||
showMessagesButton.setEnabled((nodes != null && nodes.length == 1));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
threadMessagesPanel.setChildFactory(threadMessageNodeFactory);
|
threadMessagesPanel.setChildFactory(threadMessageNodeFactory);
|
||||||
|
|
||||||
this.viewMessageComboBox.addItem(VIEW_MESSAGE_TYPE.SELECTED);
|
rootTablePane.setTableColumnsWidth(10, 20, 70);
|
||||||
this.viewMessageComboBox.addItem(VIEW_MESSAGE_TYPE.ALL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -192,21 +178,6 @@ public class MessageViewer extends JPanel implements RelationshipsViewer{
|
|||||||
.removePropertyChangeListener("focusOwner", focusPropertyListener);
|
.removePropertyChangeListener("focusOwner", focusPropertyListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showMessages() {
|
|
||||||
VIEW_MESSAGE_TYPE viewType = (VIEW_MESSAGE_TYPE)viewMessageComboBox.getSelectedItem();
|
|
||||||
switch((VIEW_MESSAGE_TYPE)viewMessageComboBox.getSelectedItem()){
|
|
||||||
case ALL:
|
|
||||||
threadMessageNodeFactory.refresh(currentSelectionInfo, null);
|
|
||||||
threadNameLabel.setText("All Messages");
|
|
||||||
|
|
||||||
((CardLayout)getLayout()).show(this, "messages");
|
|
||||||
break;
|
|
||||||
case SELECTED:
|
|
||||||
showSelectedThread();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("rawtypes")
|
@SuppressWarnings("rawtypes")
|
||||||
private void showSelectedThread() {
|
private void showSelectedThread() {
|
||||||
final Node[] nodes = rootTablePane.getExplorerManager().getSelectedNodes();
|
final Node[] nodes = rootTablePane.getExplorerManager().getSelectedNodes();
|
||||||
@ -253,12 +224,29 @@ public class MessageViewer extends JPanel implements RelationshipsViewer{
|
|||||||
if (!subject.isEmpty()) {
|
if (!subject.isEmpty()) {
|
||||||
threadNameLabel.setText(subject);
|
threadNameLabel.setText(subject);
|
||||||
}
|
}
|
||||||
// Come back and put involk later for safety.
|
|
||||||
CardLayout layout = (CardLayout)getLayout();
|
showMessagesPane();
|
||||||
layout.show(this, "messages");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void showThreadsPane() {
|
||||||
|
switchCard("threads");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void showMessagesPane() {
|
||||||
|
switchCard("messages");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void switchCard(String cardName) {
|
||||||
|
SwingUtilities.invokeLater(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
CardLayout layout = (CardLayout)getLayout();
|
||||||
|
layout.show(MessageViewer.this, cardName);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is called from within the constructor to initialize the form.
|
* 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
|
* WARNING: Do NOT modify this code. The content of this method is always
|
||||||
@ -270,15 +258,12 @@ public class MessageViewer extends JPanel implements RelationshipsViewer{
|
|||||||
java.awt.GridBagConstraints gridBagConstraints;
|
java.awt.GridBagConstraints gridBagConstraints;
|
||||||
|
|
||||||
rootMessagesPane = new javax.swing.JPanel();
|
rootMessagesPane = new javax.swing.JPanel();
|
||||||
rootTablePane = new org.sleuthkit.autopsy.communications.relationships.OutlineViewPanel();
|
|
||||||
threadsLabel = new javax.swing.JLabel();
|
threadsLabel = new javax.swing.JLabel();
|
||||||
viewMessageComboBox = new javax.swing.JComboBox<>();
|
showAllButton = new javax.swing.JButton();
|
||||||
viewMessageLabel = new javax.swing.JLabel();
|
rootTablePane = new org.sleuthkit.autopsy.communications.relationships.OutlineViewPanel();
|
||||||
showMessagesButton = new javax.swing.JButton();
|
|
||||||
messagePanel = new javax.swing.JPanel();
|
messagePanel = new javax.swing.JPanel();
|
||||||
threadMessagesPanel = new MessagesPanel();
|
threadMessagesPanel = new MessagesPanel();
|
||||||
backButton = new javax.swing.JButton();
|
backButton = new javax.swing.JButton();
|
||||||
messagesLabel = new javax.swing.JLabel();
|
|
||||||
showingMessagesLabel = new javax.swing.JLabel();
|
showingMessagesLabel = new javax.swing.JLabel();
|
||||||
threadNameLabel = new javax.swing.JLabel();
|
threadNameLabel = new javax.swing.JLabel();
|
||||||
|
|
||||||
@ -286,64 +271,41 @@ public class MessageViewer extends JPanel implements RelationshipsViewer{
|
|||||||
|
|
||||||
rootMessagesPane.setOpaque(false);
|
rootMessagesPane.setOpaque(false);
|
||||||
rootMessagesPane.setLayout(new java.awt.GridBagLayout());
|
rootMessagesPane.setLayout(new java.awt.GridBagLayout());
|
||||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
|
||||||
gridBagConstraints.gridx = 0;
|
|
||||||
gridBagConstraints.gridy = 4;
|
|
||||||
gridBagConstraints.gridwidth = 4;
|
|
||||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
|
||||||
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
|
|
||||||
gridBagConstraints.weighty = 1.0;
|
|
||||||
gridBagConstraints.insets = new java.awt.Insets(5, 15, 15, 15);
|
|
||||||
rootMessagesPane.add(rootTablePane, gridBagConstraints);
|
|
||||||
|
|
||||||
threadsLabel.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(threadsLabel, org.openide.util.NbBundle.getMessage(MessageViewer.class, "MessageViewer.threadsLabel.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(threadsLabel, org.openide.util.NbBundle.getMessage(MessageViewer.class, "MessageViewer.threadsLabel.text")); // NOI18N
|
||||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||||
gridBagConstraints.gridx = 0;
|
gridBagConstraints.gridx = 0;
|
||||||
gridBagConstraints.gridy = 0;
|
gridBagConstraints.gridy = 0;
|
||||||
gridBagConstraints.gridheight = 3;
|
|
||||||
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
|
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
|
||||||
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
|
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
|
||||||
gridBagConstraints.weightx = 1.0;
|
gridBagConstraints.weightx = 1.0;
|
||||||
gridBagConstraints.insets = new java.awt.Insets(15, 15, 0, 0);
|
gridBagConstraints.insets = new java.awt.Insets(15, 15, 9, 0);
|
||||||
rootMessagesPane.add(threadsLabel, gridBagConstraints);
|
rootMessagesPane.add(threadsLabel, gridBagConstraints);
|
||||||
|
|
||||||
viewMessageComboBox.addActionListener(new java.awt.event.ActionListener() {
|
org.openide.awt.Mnemonics.setLocalizedText(showAllButton, org.openide.util.NbBundle.getMessage(MessageViewer.class, "MessageViewer.showAllButton.text")); // NOI18N
|
||||||
|
showAllButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
viewMessageComboBoxActionPerformed(evt);
|
showAllButtonActionPerformed(evt);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||||
gridBagConstraints.gridx = 2;
|
gridBagConstraints.gridx = 0;
|
||||||
gridBagConstraints.gridy = 0;
|
gridBagConstraints.gridy = 2;
|
||||||
gridBagConstraints.gridheight = 4;
|
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
|
||||||
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
|
gridBagConstraints.insets = new java.awt.Insets(0, 15, 15, 0);
|
||||||
gridBagConstraints.insets = new java.awt.Insets(15, 0, 0, 0);
|
rootMessagesPane.add(showAllButton, gridBagConstraints);
|
||||||
rootMessagesPane.add(viewMessageComboBox, gridBagConstraints);
|
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(viewMessageLabel, org.openide.util.NbBundle.getMessage(MessageViewer.class, "MessageViewer.viewMessageLabel.text")); // NOI18N
|
rootTablePane.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
|
||||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||||
gridBagConstraints.gridx = 1;
|
gridBagConstraints.gridx = 0;
|
||||||
gridBagConstraints.gridy = 0;
|
gridBagConstraints.gridy = 1;
|
||||||
gridBagConstraints.gridheight = 2;
|
gridBagConstraints.gridwidth = 2;
|
||||||
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
|
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||||
gridBagConstraints.insets = new java.awt.Insets(15, 0, 0, 5);
|
|
||||||
rootMessagesPane.add(viewMessageLabel, gridBagConstraints);
|
|
||||||
|
|
||||||
showMessagesButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/timeline/images/btn_step_forward.png"))); // NOI18N
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(showMessagesButton, org.openide.util.NbBundle.getMessage(MessageViewer.class, "MessageViewer.showMessagesButton.text")); // NOI18N
|
|
||||||
showMessagesButton.setBorder(null);
|
|
||||||
showMessagesButton.addActionListener(new java.awt.event.ActionListener() {
|
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
|
||||||
showMessagesButtonActionPerformed(evt);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
|
||||||
gridBagConstraints.gridx = 3;
|
|
||||||
gridBagConstraints.gridy = 0;
|
|
||||||
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
|
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
|
||||||
gridBagConstraints.insets = new java.awt.Insets(15, 5, 0, 15);
|
gridBagConstraints.weightx = 1.0;
|
||||||
rootMessagesPane.add(showMessagesButton, gridBagConstraints);
|
gridBagConstraints.weighty = 1.0;
|
||||||
|
gridBagConstraints.insets = new java.awt.Insets(0, 15, 9, 15);
|
||||||
|
rootMessagesPane.add(rootTablePane, gridBagConstraints);
|
||||||
|
|
||||||
add(rootMessagesPane, "threads");
|
add(rootMessagesPane, "threads");
|
||||||
|
|
||||||
@ -351,7 +313,7 @@ public class MessageViewer extends JPanel implements RelationshipsViewer{
|
|||||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||||
gridBagConstraints.gridx = 0;
|
gridBagConstraints.gridx = 0;
|
||||||
gridBagConstraints.gridy = 3;
|
gridBagConstraints.gridy = 3;
|
||||||
gridBagConstraints.gridwidth = 5;
|
gridBagConstraints.gridwidth = 3;
|
||||||
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
|
||||||
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
|
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
|
||||||
gridBagConstraints.weightx = 1.0;
|
gridBagConstraints.weightx = 1.0;
|
||||||
@ -359,99 +321,71 @@ public class MessageViewer extends JPanel implements RelationshipsViewer{
|
|||||||
gridBagConstraints.insets = new java.awt.Insets(0, 15, 0, 15);
|
gridBagConstraints.insets = new java.awt.Insets(0, 15, 0, 15);
|
||||||
messagePanel.add(threadMessagesPanel, gridBagConstraints);
|
messagePanel.add(threadMessagesPanel, gridBagConstraints);
|
||||||
|
|
||||||
backButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/timeline/images/btn_step_back.png"))); // NOI18N
|
backButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/sleuthkit/autopsy/timeline/images/arrow-180.png"))); // NOI18N
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(backButton, org.openide.util.NbBundle.getMessage(MessageViewer.class, "MessageViewer.backButton.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(backButton, org.openide.util.NbBundle.getMessage(MessageViewer.class, "MessageViewer.backButton.text")); // NOI18N
|
||||||
backButton.setBorder(null);
|
|
||||||
backButton.setBorderPainted(false);
|
|
||||||
backButton.addActionListener(new java.awt.event.ActionListener() {
|
backButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
backButtonActionPerformed(evt);
|
backButtonActionPerformed(evt);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||||
gridBagConstraints.gridx = 0;
|
gridBagConstraints.gridx = 2;
|
||||||
gridBagConstraints.gridy = 0;
|
gridBagConstraints.gridy = 0;
|
||||||
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
|
gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST;
|
||||||
gridBagConstraints.insets = new java.awt.Insets(16, 15, 0, 0);
|
gridBagConstraints.weightx = 1.0;
|
||||||
|
gridBagConstraints.insets = new java.awt.Insets(9, 0, 9, 15);
|
||||||
messagePanel.add(backButton, gridBagConstraints);
|
messagePanel.add(backButton, gridBagConstraints);
|
||||||
backButton.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(MessageViewer.class, "MessageViewer.backButton.AccessibleContext.accessibleDescription")); // NOI18N
|
backButton.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(MessageViewer.class, "MessageViewer.backButton.AccessibleContext.accessibleDescription")); // NOI18N
|
||||||
|
|
||||||
messagesLabel.setFont(new java.awt.Font("Tahoma", 0, 24)); // NOI18N
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(messagesLabel, org.openide.util.NbBundle.getMessage(MessageViewer.class, "MessageViewer.messagesLabel.text")); // NOI18N
|
|
||||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
|
||||||
gridBagConstraints.gridx = 0;
|
|
||||||
gridBagConstraints.gridy = 1;
|
|
||||||
gridBagConstraints.gridwidth = 2;
|
|
||||||
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
|
|
||||||
gridBagConstraints.insets = new java.awt.Insets(5, 15, 0, 0);
|
|
||||||
messagePanel.add(messagesLabel, gridBagConstraints);
|
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(showingMessagesLabel, org.openide.util.NbBundle.getMessage(MessageViewer.class, "MessageViewer.showingMessagesLabel.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(showingMessagesLabel, org.openide.util.NbBundle.getMessage(MessageViewer.class, "MessageViewer.showingMessagesLabel.text")); // NOI18N
|
||||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||||
gridBagConstraints.gridx = 0;
|
gridBagConstraints.gridx = 0;
|
||||||
gridBagConstraints.gridy = 2;
|
gridBagConstraints.gridy = 0;
|
||||||
gridBagConstraints.gridwidth = 3;
|
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
|
||||||
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
|
gridBagConstraints.insets = new java.awt.Insets(9, 15, 5, 0);
|
||||||
gridBagConstraints.insets = new java.awt.Insets(5, 15, 5, 0);
|
|
||||||
messagePanel.add(showingMessagesLabel, gridBagConstraints);
|
messagePanel.add(showingMessagesLabel, gridBagConstraints);
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(threadNameLabel, org.openide.util.NbBundle.getMessage(MessageViewer.class, "MessageViewer.threadNameLabel.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(threadNameLabel, org.openide.util.NbBundle.getMessage(MessageViewer.class, "MessageViewer.threadNameLabel.text")); // NOI18N
|
||||||
gridBagConstraints = new java.awt.GridBagConstraints();
|
gridBagConstraints = new java.awt.GridBagConstraints();
|
||||||
gridBagConstraints.gridx = 3;
|
gridBagConstraints.gridx = 1;
|
||||||
gridBagConstraints.gridy = 2;
|
gridBagConstraints.gridy = 0;
|
||||||
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
|
gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST;
|
||||||
gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
|
gridBagConstraints.insets = new java.awt.Insets(9, 5, 5, 15);
|
||||||
gridBagConstraints.weightx = 1.0;
|
|
||||||
gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 15);
|
|
||||||
messagePanel.add(threadNameLabel, gridBagConstraints);
|
messagePanel.add(threadNameLabel, gridBagConstraints);
|
||||||
|
|
||||||
add(messagePanel, "messages");
|
add(messagePanel, "messages");
|
||||||
}// </editor-fold>//GEN-END:initComponents
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
private void backButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_backButtonActionPerformed
|
private void backButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_backButtonActionPerformed
|
||||||
CardLayout layout = (CardLayout) this.getLayout();
|
try {
|
||||||
layout.show(this, "threads");
|
rootTablePane.getExplorerManager().setSelectedNodes(new Node[0]);
|
||||||
|
} catch (PropertyVetoException ex) {
|
||||||
|
Exceptions.printStackTrace(ex);
|
||||||
|
}
|
||||||
|
showThreadsPane();
|
||||||
}//GEN-LAST:event_backButtonActionPerformed
|
}//GEN-LAST:event_backButtonActionPerformed
|
||||||
|
|
||||||
private void showMessagesButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showMessagesButtonActionPerformed
|
private void showAllButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showAllButtonActionPerformed
|
||||||
SwingUtilities.invokeLater(new Runnable() {
|
threadMessageNodeFactory.refresh(currentSelectionInfo, null);
|
||||||
@Override
|
threadNameLabel.setText("All Messages");
|
||||||
public void run() {
|
|
||||||
showMessages();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}//GEN-LAST:event_showMessagesButtonActionPerformed
|
|
||||||
|
|
||||||
private void viewMessageComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_viewMessageComboBoxActionPerformed
|
|
||||||
boolean accountSelected = (currentSelectionInfo != null && currentSelectionInfo.getAccounts() != null && !currentSelectionInfo.getAccounts().isEmpty());
|
|
||||||
switch((VIEW_MESSAGE_TYPE)viewMessageComboBox.getSelectedItem()) {
|
|
||||||
case ALL:
|
|
||||||
showMessagesButton.setEnabled(accountSelected);
|
|
||||||
break;
|
|
||||||
case SELECTED:
|
|
||||||
Node[] selected = rootTablePane.getExplorerManager().getSelectedNodes();
|
|
||||||
showMessagesButton.setEnabled(selected != null && selected.length == 1);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}//GEN-LAST:event_viewMessageComboBoxActionPerformed
|
|
||||||
|
|
||||||
|
showMessagesPane();
|
||||||
|
}//GEN-LAST:event_showAllButtonActionPerformed
|
||||||
|
|
||||||
// Variables declaration - do not modify//GEN-BEGIN:variables
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
private javax.swing.JButton backButton;
|
private javax.swing.JButton backButton;
|
||||||
private javax.swing.JPanel messagePanel;
|
private javax.swing.JPanel messagePanel;
|
||||||
private javax.swing.JLabel messagesLabel;
|
|
||||||
private javax.swing.JPanel rootMessagesPane;
|
private javax.swing.JPanel rootMessagesPane;
|
||||||
private org.sleuthkit.autopsy.communications.relationships.OutlineViewPanel rootTablePane;
|
private org.sleuthkit.autopsy.communications.relationships.OutlineViewPanel rootTablePane;
|
||||||
private javax.swing.JButton showMessagesButton;
|
private javax.swing.JButton showAllButton;
|
||||||
private javax.swing.JLabel showingMessagesLabel;
|
private javax.swing.JLabel showingMessagesLabel;
|
||||||
private org.sleuthkit.autopsy.communications.relationships.MessagesPanel threadMessagesPanel;
|
private org.sleuthkit.autopsy.communications.relationships.MessagesPanel threadMessagesPanel;
|
||||||
private javax.swing.JLabel threadNameLabel;
|
private javax.swing.JLabel threadNameLabel;
|
||||||
private javax.swing.JLabel threadsLabel;
|
private javax.swing.JLabel threadsLabel;
|
||||||
private javax.swing.JComboBox<VIEW_MESSAGE_TYPE> viewMessageComboBox;
|
|
||||||
private javax.swing.JLabel viewMessageLabel;
|
|
||||||
// End of variables declaration//GEN-END:variables
|
// End of variables declaration//GEN-END:variables
|
||||||
|
|
||||||
class ShowThreadMessagesAction extends AbstractAction {
|
class ShowThreadMessagesAction extends AbstractAction {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
|
||||||
@ -463,19 +397,4 @@ public class MessageViewer extends JPanel implements RelationshipsViewer{
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private enum VIEW_MESSAGE_TYPE{
|
|
||||||
ALL(Bundle.MessageViewer_viewMessage_all()),
|
|
||||||
SELECTED(Bundle.MessageViewer_viewMessage_selected());
|
|
||||||
|
|
||||||
private final String displayLabel;
|
|
||||||
VIEW_MESSAGE_TYPE(String label) {
|
|
||||||
displayLabel = label;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return displayLabel;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -100,7 +100,7 @@ public class MessagesPanel extends javax.swing.JPanel implements Lookup.Provider
|
|||||||
|
|
||||||
splitPane.setResizeWeight(0.5);
|
splitPane.setResizeWeight(0.5);
|
||||||
splitPane.setDividerLocation(0.5);
|
splitPane.setDividerLocation(0.5);
|
||||||
|
outlineViewPanel.setTableColumnsWidth(5,10,10,15,50,10);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MessagesPanel(ChildFactory<?> nodeFactory) {
|
public MessagesPanel(ChildFactory<?> nodeFactory) {
|
||||||
|
@ -19,7 +19,9 @@
|
|||||||
package org.sleuthkit.autopsy.communications.relationships;
|
package org.sleuthkit.autopsy.communications.relationships;
|
||||||
|
|
||||||
import java.awt.CardLayout;
|
import java.awt.CardLayout;
|
||||||
|
import javax.swing.JTable;
|
||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
|
import javax.swing.table.TableColumn;
|
||||||
import org.openide.explorer.ExplorerManager;
|
import org.openide.explorer.ExplorerManager;
|
||||||
import static org.openide.explorer.ExplorerUtils.createLookup;
|
import static org.openide.explorer.ExplorerUtils.createLookup;
|
||||||
import org.openide.explorer.view.OutlineView;
|
import org.openide.explorer.view.OutlineView;
|
||||||
@ -99,6 +101,28 @@ public class OutlineViewPanel extends javax.swing.JPanel implements ExplorerMana
|
|||||||
outlineView.setEnabled(enabled);
|
outlineView.setEnabled(enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the width of the columns of the OutlineView based on the passed in
|
||||||
|
* list of percentages. There should be on double value for each column
|
||||||
|
* in the OutlineView.
|
||||||
|
*
|
||||||
|
* @param percentages A series of double percentages values representing
|
||||||
|
* what percent of the total width of the table each
|
||||||
|
* column should have.
|
||||||
|
*/
|
||||||
|
public void setTableColumnsWidth(double... percentages) {
|
||||||
|
JTable table = outlineView.getOutline();
|
||||||
|
double total = 0;
|
||||||
|
for (int i = 0; i < table.getColumnModel().getColumnCount(); i++) {
|
||||||
|
total += percentages[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < table.getColumnModel().getColumnCount(); i++) {
|
||||||
|
TableColumn column = table.getColumnModel().getColumn(i);
|
||||||
|
column.setPreferredWidth((int) (table.getPreferredSize().width * (percentages[i] / total)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method is called from within the constructor to initialize the form.
|
* 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
|
* WARNING: Do NOT modify this code. The content of this method is always
|
||||||
|
@ -171,7 +171,7 @@ final class ThreadChildNodeFactory extends ChildFactory<BlackboardArtifact> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (attribute != null) {
|
if (attribute != null) {
|
||||||
return new MessageNode(bba, attribute.getValueString(), preferredAction);
|
return new ThreadNode(bba, attribute.getValueString());
|
||||||
} else {
|
} else {
|
||||||
// Only one of these should occur.
|
// Only one of these should occur.
|
||||||
return new UnthreadedNode();
|
return new UnthreadedNode();
|
||||||
@ -188,6 +188,7 @@ final class ThreadChildNodeFactory extends ChildFactory<BlackboardArtifact> {
|
|||||||
UnthreadedNode() {
|
UnthreadedNode() {
|
||||||
super(Children.LEAF);
|
super(Children.LEAF);
|
||||||
setDisplayName("Unthreaded");
|
setDisplayName("Unthreaded");
|
||||||
|
this.setIconBaseWithExtension("org/sleuthkit/autopsy/communications/images/unthreaded.png" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
46
Core/src/org/sleuthkit/autopsy/communications/relationships/ThreadNode.java
Executable file
46
Core/src/org/sleuthkit/autopsy/communications/relationships/ThreadNode.java
Executable file
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* To change this license header, choose License Headers in Project Properties.
|
||||||
|
* To change this template file, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
package org.sleuthkit.autopsy.communications.relationships;
|
||||||
|
|
||||||
|
import javax.swing.Action;
|
||||||
|
import org.openide.nodes.AbstractNode;
|
||||||
|
import org.openide.nodes.Children;
|
||||||
|
import org.openide.nodes.Sheet;
|
||||||
|
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author kelly
|
||||||
|
*/
|
||||||
|
final class ThreadNode extends AbstractNode{
|
||||||
|
|
||||||
|
final private MessageNode messageNode;
|
||||||
|
|
||||||
|
ThreadNode(BlackboardArtifact artifact, String threadID) {
|
||||||
|
super(Children.LEAF);
|
||||||
|
messageNode = new MessageNode(artifact, threadID, null);
|
||||||
|
this.setIconBaseWithExtension("org/sleuthkit/autopsy/communications/images/threaded.png" );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Sheet createSheet() {
|
||||||
|
return messageNode.createSheet();
|
||||||
|
}
|
||||||
|
|
||||||
|
String getThreadID() {
|
||||||
|
return messageNode.getThreadID();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Action getPreferredAction() {
|
||||||
|
return messageNode.getPreferredAction();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDisplayName() {
|
||||||
|
return messageNode.getDisplayName();
|
||||||
|
}
|
||||||
|
}
|
@ -151,7 +151,7 @@ MediaViewImagePanel.rotationTextField.text=
|
|||||||
MediaViewImagePanel.rotateLeftButton.toolTipText=
|
MediaViewImagePanel.rotateLeftButton.toolTipText=
|
||||||
HtmlPanel.showImagesToggleButton.text=Download Images
|
HtmlPanel.showImagesToggleButton.text=Download Images
|
||||||
MediaPlayerPanel.audioSlider.toolTipText=
|
MediaPlayerPanel.audioSlider.toolTipText=
|
||||||
MediaPlayerPanel.VolumeIcon.text=\ Volume
|
MediaPlayerPanel.VolumeIcon.text=\ \ \ \ \ Volume
|
||||||
MediaPlayerPanel.progressLabel.text=00:00:00/00:00:00
|
MediaPlayerPanel.progressLabel.text=00:00:00/00:00:00
|
||||||
MediaPlayerPanel.playButton.text=\u25ba
|
MediaPlayerPanel.playButton.text=\u25ba
|
||||||
MediaPlayerPanel.infoLabel.text=No Errors
|
MediaPlayerPanel.infoLabel.text=No Errors
|
||||||
|
@ -3,7 +3,13 @@ Installer.closing.confirmationDialog.title=Ingest is Running
|
|||||||
# {0} - exception message
|
# {0} - exception message
|
||||||
Installer.closing.messageBox.caseCloseExceptionMessage=Error closing case: {0}
|
Installer.closing.messageBox.caseCloseExceptionMessage=Error closing case: {0}
|
||||||
OpenIDE-Module-Display-Category=Infrastructure
|
OpenIDE-Module-Display-Category=Infrastructure
|
||||||
OpenIDE-Module-Long-Description=This is the core Autopsy module.\n\nThe module contains the core components needed for the bare application to run; the RCP platform, windowing GUI, sleuthkit bindings, datamodel / storage, explorer, result viewers, content viewers, ingest framework, reporting, and core tools, such as the file search.\n\nThe framework included in the module contains APIs for developing modules for ingest, viewers and reporting. The modules can be deployed as Plugins using the Autopsy plugin installer.\nThis module should not be uninstalled - without it, Autopsy will not run.\n\nFor more information, see http://www.sleuthkit.org/autopsy/
|
OpenIDE-Module-Long-Description=\
|
||||||
|
This is the core Autopsy module.\n\n\
|
||||||
|
The module contains the core components needed for the bare application to run; the RCP platform, windowing GUI, sleuthkit bindings, datamodel / storage, explorer, result viewers, content viewers, ingest framework, reporting, and core tools, such as the file search.\n\n\
|
||||||
|
The framework included in the module contains APIs for developing modules for ingest, viewers and reporting. \
|
||||||
|
The modules can be deployed as Plugins using the Autopsy plugin installer.\n\
|
||||||
|
This module should not be uninstalled - without it, Autopsy will not run.\n\n\
|
||||||
|
For more information, see http://www.sleuthkit.org/autopsy/
|
||||||
OpenIDE-Module-Name=Autopsy-Core
|
OpenIDE-Module-Name=Autopsy-Core
|
||||||
OpenIDE-Module-Short-Description=Autopsy Core Module
|
OpenIDE-Module-Short-Description=Autopsy Core Module
|
||||||
org_sleuthkit_autopsy_core_update_center=http://sleuthkit.org/autopsy/updates.xml
|
org_sleuthkit_autopsy_core_update_center=http://sleuthkit.org/autopsy/updates.xml
|
||||||
|
@ -63,9 +63,9 @@ DataContentViewerHex.totalPageLabel.text_1=100
|
|||||||
DataContentViewerHex.pageLabel2.text=Page
|
DataContentViewerHex.pageLabel2.text=Page
|
||||||
|
|
||||||
# Product Information panel
|
# Product Information panel
|
||||||
LBL_Description=<div style="font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif;">\n <b>Product Version:</b> {0} ({9}) <br><b>Sleuth Kit Version:</b> {7} <br><b>Netbeans RCP Build:</b> {8} <br> <b>Java:</b> {1}; {2}<br> <b>System:</b> {3}; {4}; {5}<br><b>Userdir:</b> {6}</div>
|
LBL_Description=<div style=\"font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif;\">\n <b>Product Version:</b> {0} ({9}) <br><b>Sleuth Kit Version:</b> {7} <br><b>Netbeans RCP Build:</b> {8} <br> <b>Java:</b> {1}; {2}<br> <b>System:</b> {3}; {4}; {5}<br><b>Userdir:</b> {6}</div>
|
||||||
Format_OperatingSystem_Value={0} version {1} running on {2}
|
Format_OperatingSystem_Value={0} version {1} running on {2}
|
||||||
LBL_Copyright=<div style="font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif; ">Autopsy™ is a digital forensics platform based on The Sleuth Kit™ and other tools. <br><ul><li>General Information: <a style="color: #1E2A60;" href="http://www.sleuthkit.org">http://www.sleuthkit.org</a>.</li><li>Training: <a style="color: #1E2A60;" href="http://www.basistech.com/autopsy-training">http://www.basistech.com/autopsy-training</a></li><li>Commercial Support: <a style="color: #1E2A60;" href="http://www.basistech.com/digital-forensics/autopsy/support/">http://www.basistech.com/digital-forensics/autopsy/support/</a></li></ul>Copyright © 2003-2018. </div>
|
LBL_Copyright=<div style\="font-size: 12pt; font-family: Verdana, 'Verdana CE', Arial, 'Arial CE', 'Lucida Grande CE', lucida, 'Helvetica CE', sans-serif; ">Autopsy™ is a digital forensics platform based on The Sleuth Kit™ and other tools. <br><ul><li>General Information: <a style\="color: \#1E2A60;" href\="http://www.sleuthkit.org">http://www.sleuthkit.org</a>.</li><li>Training: <a style\="color: \#1E2A60;" href\="http://www.basistech.com/autopsy-training">http://www.basistech.com/autopsy-training</a></li><li>Commercial Support: <a style\="color: \#1E2A60;" href\="http://www.basistech.com/digital-forensics/autopsy/support/">http://www.basistech.com/digital-forensics/autopsy/support/</a></li></ul>Copyright © 2003-2018. </div>
|
||||||
SortChooser.dialogTitle=Choose Sort Criteria
|
SortChooser.dialogTitle=Choose Sort Criteria
|
||||||
ThumbnailViewChildren.progress.cancelling=(Cancelling)
|
ThumbnailViewChildren.progress.cancelling=(Cancelling)
|
||||||
# {0} - file name
|
# {0} - file name
|
||||||
@ -95,7 +95,7 @@ DataResultViewerThumbnail.pageNextButton.text=
|
|||||||
DataResultViewerThumbnail.imagesLabel.text=Images:
|
DataResultViewerThumbnail.imagesLabel.text=Images:
|
||||||
DataResultViewerThumbnail.imagesRangeLabel.text=-
|
DataResultViewerThumbnail.imagesRangeLabel.text=-
|
||||||
DataResultViewerThumbnail.pageNumLabel.text=-
|
DataResultViewerThumbnail.pageNumLabel.text=-
|
||||||
DataResultViewerThumbnail.filePathLabel.text=\
|
DataResultViewerThumbnail.filePathLabel.text=\ \ \
|
||||||
DataResultViewerThumbnail.goToPageLabel.text=Go to Page:
|
DataResultViewerThumbnail.goToPageLabel.text=Go to Page:
|
||||||
DataResultViewerThumbnail.goToPageField.text=
|
DataResultViewerThumbnail.goToPageField.text=
|
||||||
AdvancedConfigurationDialog.cancelButton.text=Cancel
|
AdvancedConfigurationDialog.cancelButton.text=Cancel
|
||||||
|
@ -23,7 +23,9 @@ PlatformUtil.getProcVmUsed.sigarNotInit.msg=Cannot get virt mem used, sigar not
|
|||||||
PlatformUtil.getProcVmUsed.gen.msg=Cannot get virt mem used, {0}
|
PlatformUtil.getProcVmUsed.gen.msg=Cannot get virt mem used, {0}
|
||||||
PlatformUtil.getJvmMemInfo.usageText=JVM heap usage: {0}, JVM non-heap usage: {1}
|
PlatformUtil.getJvmMemInfo.usageText=JVM heap usage: {0}, JVM non-heap usage: {1}
|
||||||
PlatformUtil.getPhysicalMemInfo.usageText=Physical memory usage (max, total, free): {0}, {1}, {2}
|
PlatformUtil.getPhysicalMemInfo.usageText=Physical memory usage (max, total, free): {0}, {1}, {2}
|
||||||
PlatformUtil.getAllMemUsageInfo.usageText={0}\n{1}\nProcess Virtual Memory: {2}
|
PlatformUtil.getAllMemUsageInfo.usageText={0}\n\
|
||||||
|
{1}\n\
|
||||||
|
Process Virtual Memory: {2}
|
||||||
# {0} - file name
|
# {0} - file name
|
||||||
ReadImageTask.mesageText=Reading image: {0}
|
ReadImageTask.mesageText=Reading image: {0}
|
||||||
StringExtract.illegalStateException.cannotInit.msg=Unicode table not properly initialized, cannot instantiate StringExtract
|
StringExtract.illegalStateException.cannotInit.msg=Unicode table not properly initialized, cannot instantiate StringExtract
|
||||||
|
@ -396,15 +396,15 @@ public abstract class AbstractAbstractFileNode<T extends AbstractFile> extends A
|
|||||||
"# {0} - occurenceCount",
|
"# {0} - occurenceCount",
|
||||||
"AbstractAbstractFileNode.createSheet.count.description=There were {0} datasource(s) found with occurences of the MD5 correlation value"})
|
"AbstractAbstractFileNode.createSheet.count.description=There were {0} datasource(s) found with occurences of the MD5 correlation value"})
|
||||||
@Override
|
@Override
|
||||||
protected Pair<Long, String> getCountPropertyAndDescription(CorrelationAttributeInstance attribute, String defaultDescription) {
|
protected Pair<Long, String> getCountPropertyAndDescription(CorrelationAttributeInstance.Type attributeType, String attributeValue, String defaultDescription) {
|
||||||
Long count = -1L; //The column renderer will not display negative values, negative value used when count unavailble to preserve sorting
|
Long count = -1L; //The column renderer will not display negative values, negative value used when count unavailble to preserve sorting
|
||||||
String description = defaultDescription;
|
String description = defaultDescription;
|
||||||
try {
|
try {
|
||||||
//don't perform the query if there is no correlation value
|
//don't perform the query if there is no correlation value
|
||||||
if (attribute != null && StringUtils.isNotBlank(attribute.getCorrelationValue())) {
|
if (attributeType != null && StringUtils.isNotBlank(attributeValue)) {
|
||||||
count = EamDb.getInstance().getCountUniqueCaseDataSourceTuplesHavingTypeValue(attribute.getCorrelationType(), attribute.getCorrelationValue());
|
count = EamDb.getInstance().getCountUniqueCaseDataSourceTuplesHavingTypeValue(attributeType, attributeValue);
|
||||||
description = Bundle.AbstractAbstractFileNode_createSheet_count_description(count);
|
description = Bundle.AbstractAbstractFileNode_createSheet_count_description(count);
|
||||||
} else if (attribute != null) {
|
} else if (attributeType != null) {
|
||||||
description = Bundle.AbstractAbstractFileNode_createSheet_count_hashLookupNotRun_description();
|
description = Bundle.AbstractAbstractFileNode_createSheet_count_hashLookupNotRun_description();
|
||||||
}
|
}
|
||||||
} catch (EamDbException ex) {
|
} catch (EamDbException ex) {
|
||||||
|
@ -35,6 +35,7 @@ import org.openide.util.NbBundle;
|
|||||||
import org.sleuthkit.autopsy.casemodule.Case;
|
import org.sleuthkit.autopsy.casemodule.Case;
|
||||||
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
|
import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance;
|
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance;
|
||||||
|
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance.Type;
|
||||||
import org.sleuthkit.autopsy.corecomponents.DataResultViewerTable;
|
import org.sleuthkit.autopsy.corecomponents.DataResultViewerTable;
|
||||||
import org.sleuthkit.autopsy.coreutils.Logger;
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
import org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE;
|
import org.sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE;
|
||||||
@ -353,11 +354,12 @@ public abstract class AbstractContentNode<T extends Content> extends ContentNode
|
|||||||
/**
|
/**
|
||||||
* Returns occurrences/count property for the node.
|
* Returns occurrences/count property for the node.
|
||||||
*
|
*
|
||||||
* @param attribute correlation attribute instance
|
* @param attributeType the type of the attribute to count
|
||||||
|
* @param attributeValue the value of the attribute to count
|
||||||
* @param defaultDescription a description to use when none is determined by
|
* @param defaultDescription a description to use when none is determined by
|
||||||
* the getCountPropertyAndDescription method
|
* the getCountPropertyAndDescription method
|
||||||
*
|
*
|
||||||
* @return count property for the underlying content of the node.
|
* @return count property for the underlying content of the node.
|
||||||
*/
|
*/
|
||||||
abstract protected Pair<Long, String> getCountPropertyAndDescription(CorrelationAttributeInstance attribute, String defaultDescription);
|
abstract protected Pair<Long, String> getCountPropertyAndDescription(Type attributeType, String attributeValue, String defaultDescription);
|
||||||
}
|
}
|
||||||
|
@ -52,6 +52,7 @@ import org.sleuthkit.autopsy.casemodule.events.CommentChangedEvent;
|
|||||||
import org.sleuthkit.autopsy.casemodule.events.ContentTagAddedEvent;
|
import org.sleuthkit.autopsy.casemodule.events.ContentTagAddedEvent;
|
||||||
import org.sleuthkit.autopsy.casemodule.events.ContentTagDeletedEvent;
|
import org.sleuthkit.autopsy.casemodule.events.ContentTagDeletedEvent;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance;
|
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance;
|
||||||
|
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance.Type;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeNormalizationException;
|
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeNormalizationException;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.EamArtifactUtil;
|
import org.sleuthkit.autopsy.centralrepository.datamodel.EamArtifactUtil;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.EamDb;
|
import org.sleuthkit.autopsy.centralrepository.datamodel.EamDb;
|
||||||
@ -751,7 +752,7 @@ public class BlackboardArtifactNode extends AbstractContentNode<BlackboardArtifa
|
|||||||
"BlackboardArtifactNode.createSheet.count.description=There were {0} datasource(s) found with occurrences of the correlation value of type {1}"})
|
"BlackboardArtifactNode.createSheet.count.description=There were {0} datasource(s) found with occurrences of the correlation value of type {1}"})
|
||||||
@Deprecated
|
@Deprecated
|
||||||
protected final void addCountProperty(Sheet.Set sheetSet, CorrelationAttributeInstance attribute) {
|
protected final void addCountProperty(Sheet.Set sheetSet, CorrelationAttributeInstance attribute) {
|
||||||
Pair<Long, String> countAndDescription = getCountPropertyAndDescription(attribute, Bundle.BlackboardArtifactNode_createSheet_count_noCorrelationAttributes_description());
|
Pair<Long, String> countAndDescription = getCountPropertyAndDescription(attribute.getCorrelationType(), attribute.getCorrelationValue(), Bundle.BlackboardArtifactNode_createSheet_count_noCorrelationAttributes_description());
|
||||||
sheetSet.put(
|
sheetSet.put(
|
||||||
new NodeProperty<>(Bundle.BlackboardArtifactNode_createSheet_count_name(), Bundle.BlackboardArtifactNode_createSheet_count_displayName(), countAndDescription.getRight(), countAndDescription.getLeft()));
|
new NodeProperty<>(Bundle.BlackboardArtifactNode_createSheet_count_name(), Bundle.BlackboardArtifactNode_createSheet_count_displayName(), countAndDescription.getRight(), countAndDescription.getLeft()));
|
||||||
}
|
}
|
||||||
@ -759,22 +760,24 @@ public class BlackboardArtifactNode extends AbstractContentNode<BlackboardArtifa
|
|||||||
/**
|
/**
|
||||||
* Gets the Occurrences property for the node.
|
* Gets the Occurrences property for the node.
|
||||||
*
|
*
|
||||||
* @param attribute correlation attribute instance
|
* @param attributeType the type of the attribute to count
|
||||||
* @param defaultDescription
|
* @param attributeValue the value of the attribute to count
|
||||||
|
* @param defaultDescription a description to use when none is determined by
|
||||||
|
* the getCountPropertyAndDescription method
|
||||||
*
|
*
|
||||||
* @return count and description
|
* @return count and description
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected Pair<Long, String> getCountPropertyAndDescription(CorrelationAttributeInstance attribute, String defaultDescription) {
|
protected Pair<Long, String> getCountPropertyAndDescription(Type attributeType, String attributeValue, String defaultDescription) {
|
||||||
Long count = -1L;
|
Long count = -1L;
|
||||||
String description = defaultDescription;
|
String description = defaultDescription;
|
||||||
try {
|
try {
|
||||||
//don't perform the query if there is no correlation value
|
//don't perform the query if there is no correlation value
|
||||||
if (attribute != null && StringUtils.isNotBlank(attribute.getCorrelationValue())) {
|
if (attributeType != null && StringUtils.isNotBlank(attributeValue)) {
|
||||||
count = EamDb.getInstance().getCountUniqueCaseDataSourceTuplesHavingTypeValue(attribute.getCorrelationType(), attribute.getCorrelationValue());
|
count = EamDb.getInstance().getCountUniqueCaseDataSourceTuplesHavingTypeValue(attributeType, attributeValue);
|
||||||
description = Bundle.BlackboardArtifactNode_createSheet_count_description(count, attribute.getCorrelationType().getDisplayName());
|
description = Bundle.BlackboardArtifactNode_createSheet_count_description(count, attributeType.getDisplayName());
|
||||||
} else if (attribute != null) {
|
} else if (attributeType != null) {
|
||||||
description = Bundle.BlackboardArtifactNode_createSheet_count_noCorrelationValues_description();
|
description = Bundle.BlackboardArtifactNode_createSheet_count_noCorrelationValues_description();
|
||||||
}
|
}
|
||||||
} catch (EamDbException ex) {
|
} catch (EamDbException ex) {
|
||||||
|
@ -43,6 +43,7 @@ ArtifactStringContent.attrsTableHeader.type=Type
|
|||||||
ArtifactStringContent.attrsTableHeader.value=Value
|
ArtifactStringContent.attrsTableHeader.value=Value
|
||||||
ArtifactStringContent.failedToGetAttributes.message=Failed to get some or all attributes from case database
|
ArtifactStringContent.failedToGetAttributes.message=Failed to get some or all attributes from case database
|
||||||
ArtifactStringContent.failedToGetSourcePath.message=Failed to get source file path from case database
|
ArtifactStringContent.failedToGetSourcePath.message=Failed to get source file path from case database
|
||||||
|
# {0} - node name
|
||||||
BaseChildFactory.NoSuchEventBusException.message=No event bus for node: {0}
|
BaseChildFactory.NoSuchEventBusException.message=No event bus for node: {0}
|
||||||
BlackboardArtifactNode.createSheet.artifactDetails.displayName=Result Details
|
BlackboardArtifactNode.createSheet.artifactDetails.displayName=Result Details
|
||||||
BlackboardArtifactNode.createSheet.artifactDetails.name=Result Details
|
BlackboardArtifactNode.createSheet.artifactDetails.name=Result Details
|
||||||
@ -262,10 +263,10 @@ ImageNode.getActions.viewInNewWin.text=View in New Window
|
|||||||
ImageNode.createSheet.name.name=Name
|
ImageNode.createSheet.name.name=Name
|
||||||
ImageNode.createSheet.name.displayName=Name
|
ImageNode.createSheet.name.displayName=Name
|
||||||
ImageNode.createSheet.name.desc=no description
|
ImageNode.createSheet.name.desc=no description
|
||||||
Installer.exception.tskVerStringNull.msg=Sleuth Kit JNI test call returned without error, but version string was null!
|
Installer.exception.tskVerStringNull.msg=Sleuth Kit JNI test call returned without error, but version string was null\!
|
||||||
Installer.exception.taskVerStringBang.msg=Sleuth Kit JNI test call returned without error, but version string was ""!
|
Installer.exception.taskVerStringBang.msg=Sleuth Kit JNI test call returned without error, but version string was ""\!
|
||||||
Installer.tskLibErr.msg=Problem with Sleuth Kit JNI. Test call failed!\n\nDetails: {0}
|
Installer.tskLibErr.msg=Problem with Sleuth Kit JNI. Test call failed\!\n\nDetails: {0}
|
||||||
Installer.tskLibErr.err=Fatal Error!
|
Installer.tskLibErr.err=Fatal Error\!
|
||||||
InterestingHits.interestingItems.text=INTERESTING ITEMS
|
InterestingHits.interestingItems.text=INTERESTING ITEMS
|
||||||
InterestingHits.displayName.text=Interesting Items
|
InterestingHits.displayName.text=Interesting Items
|
||||||
InterestingHits.createSheet.name.name=Name
|
InterestingHits.createSheet.name.name=Name
|
||||||
|
@ -22,13 +22,19 @@ import java.beans.PropertyChangeEvent;
|
|||||||
import java.beans.PropertyChangeListener;
|
import java.beans.PropertyChangeListener;
|
||||||
import java.lang.ref.WeakReference;
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.logging.Level;
|
||||||
import org.openide.util.NbBundle.Messages;
|
import org.openide.util.NbBundle.Messages;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance;
|
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance;
|
||||||
|
import org.sleuthkit.autopsy.centralrepository.datamodel.CorrelationAttributeInstance.Type;
|
||||||
import org.sleuthkit.autopsy.centralrepository.datamodel.EamArtifactUtil;
|
import org.sleuthkit.autopsy.centralrepository.datamodel.EamArtifactUtil;
|
||||||
|
import org.sleuthkit.autopsy.centralrepository.datamodel.EamDbException;
|
||||||
import org.sleuthkit.autopsy.core.UserPreferences;
|
import org.sleuthkit.autopsy.core.UserPreferences;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
import org.sleuthkit.autopsy.events.AutopsyEvent;
|
import org.sleuthkit.autopsy.events.AutopsyEvent;
|
||||||
|
import org.sleuthkit.datamodel.AbstractFile;
|
||||||
import org.sleuthkit.datamodel.BlackboardArtifact;
|
import org.sleuthkit.datamodel.BlackboardArtifact;
|
||||||
import org.sleuthkit.datamodel.Tag;
|
import org.sleuthkit.datamodel.Tag;
|
||||||
|
import org.sleuthkit.datamodel.TskCoreException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Background task to get Score, Comment and Occurrences values for an Abstract
|
* Background task to get Score, Comment and Occurrences values for an Abstract
|
||||||
@ -39,6 +45,7 @@ class GetSCOTask implements Runnable {
|
|||||||
|
|
||||||
private final WeakReference<AbstractContentNode<?>> weakNodeRef;
|
private final WeakReference<AbstractContentNode<?>> weakNodeRef;
|
||||||
private final PropertyChangeListener listener;
|
private final PropertyChangeListener listener;
|
||||||
|
private static final Logger logger = Logger.getLogger(GetSCOTask.class.getName());
|
||||||
|
|
||||||
GetSCOTask(WeakReference<AbstractContentNode<?>> weakContentRef, PropertyChangeListener listener) {
|
GetSCOTask(WeakReference<AbstractContentNode<?>> weakContentRef, PropertyChangeListener listener) {
|
||||||
this.weakNodeRef = weakContentRef;
|
this.weakNodeRef = weakContentRef;
|
||||||
@ -63,8 +70,10 @@ class GetSCOTask implements Runnable {
|
|||||||
SCOData scoData = new SCOData();
|
SCOData scoData = new SCOData();
|
||||||
scoData.setScoreAndDescription(contentNode.getScorePropertyAndDescription(tags));
|
scoData.setScoreAndDescription(contentNode.getScorePropertyAndDescription(tags));
|
||||||
scoData.setComment(contentNode.getCommentProperty(tags, fileAttribute));
|
scoData.setComment(contentNode.getCommentProperty(tags, fileAttribute));
|
||||||
|
|
||||||
if (!UserPreferences.hideCentralRepoCommentsAndOccurrences()) {
|
if (!UserPreferences.hideCentralRepoCommentsAndOccurrences()) {
|
||||||
CorrelationAttributeInstance occurrencesAttribute = null;
|
Type type = null;
|
||||||
|
String value = null;
|
||||||
String description = Bundle.GetSCOTask_occurrences_defaultDescription();
|
String description = Bundle.GetSCOTask_occurrences_defaultDescription();
|
||||||
if (contentNode instanceof BlackboardArtifactNode) {
|
if (contentNode instanceof BlackboardArtifactNode) {
|
||||||
BlackboardArtifact bbArtifact = ((BlackboardArtifactNode) contentNode).getArtifact();
|
BlackboardArtifact bbArtifact = ((BlackboardArtifactNode) contentNode).getArtifact();
|
||||||
@ -77,7 +86,14 @@ class GetSCOTask implements Runnable {
|
|||||||
|| bbArtifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_OBJECT_DETECTED.getTypeID()
|
|| bbArtifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_OBJECT_DETECTED.getTypeID()
|
||||||
|| bbArtifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_EXT_MISMATCH_DETECTED.getTypeID()
|
|| bbArtifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_EXT_MISMATCH_DETECTED.getTypeID()
|
||||||
|| bbArtifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_HASHSET_HIT.getTypeID()) {
|
|| bbArtifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_HASHSET_HIT.getTypeID()) {
|
||||||
occurrencesAttribute = fileAttribute;
|
try {
|
||||||
|
if (bbArtifact.getParent() instanceof AbstractFile) {
|
||||||
|
type = CorrelationAttributeInstance.getDefaultCorrelationTypes().get(CorrelationAttributeInstance.FILES_TYPE_ID);
|
||||||
|
value = ((AbstractFile) bbArtifact.getParent()).getMd5Hash();
|
||||||
|
}
|
||||||
|
} catch (TskCoreException | EamDbException ex) {
|
||||||
|
logger.log(Level.WARNING, "Unable to get correlation type or value to determine value for O column for artifact", ex);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
List<CorrelationAttributeInstance> listOfPossibleAttributes = EamArtifactUtil.makeInstancesFromBlackboardArtifact(bbArtifact, false);
|
List<CorrelationAttributeInstance> listOfPossibleAttributes = EamArtifactUtil.makeInstancesFromBlackboardArtifact(bbArtifact, false);
|
||||||
if (listOfPossibleAttributes.size() > 1) {
|
if (listOfPossibleAttributes.size() > 1) {
|
||||||
@ -85,18 +101,25 @@ class GetSCOTask implements Runnable {
|
|||||||
description = Bundle.GetSCOTask_occurrences_multipleProperties();
|
description = Bundle.GetSCOTask_occurrences_multipleProperties();
|
||||||
} else if (!listOfPossibleAttributes.isEmpty()) {
|
} else if (!listOfPossibleAttributes.isEmpty()) {
|
||||||
//there should only be one item in the list
|
//there should only be one item in the list
|
||||||
occurrencesAttribute = listOfPossibleAttributes.get(0);
|
type = listOfPossibleAttributes.get(0).getCorrelationType();
|
||||||
|
value = listOfPossibleAttributes.get(0).getCorrelationValue();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else if (contentNode.getContent() instanceof AbstractFile) {
|
||||||
//use the file instance correlation attribute if the node is not a BlackboardArtifactNode
|
//use the file instance correlation attribute if the node is not a BlackboardArtifactNode
|
||||||
occurrencesAttribute = fileAttribute;
|
try {
|
||||||
|
type = CorrelationAttributeInstance.getDefaultCorrelationTypes().get(CorrelationAttributeInstance.FILES_TYPE_ID);
|
||||||
|
value = ((AbstractFile) contentNode.getContent()).getMd5Hash();
|
||||||
|
} catch (EamDbException ex) {
|
||||||
|
logger.log(Level.WARNING, "Unable to get correlation type to determine value for O column for file", ex);
|
||||||
}
|
}
|
||||||
scoData.setCountAndDescription(contentNode.getCountPropertyAndDescription(occurrencesAttribute, description));
|
}
|
||||||
|
scoData.setCountAndDescription(contentNode.getCountPropertyAndDescription(type, value, description));
|
||||||
}
|
}
|
||||||
|
|
||||||
// signal SCO data is available.
|
// signal SCO data is available.
|
||||||
if (listener != null) {
|
if (listener
|
||||||
|
!= null) {
|
||||||
listener.propertyChange(new PropertyChangeEvent(
|
listener.propertyChange(new PropertyChangeEvent(
|
||||||
AutopsyEvent.SourceType.LOCAL.toString(),
|
AutopsyEvent.SourceType.LOCAL.toString(),
|
||||||
AbstractAbstractFileNode.NodeSpecificEvents.SCO_AVAILABLE.toString(),
|
AbstractAbstractFileNode.NodeSpecificEvents.SCO_AVAILABLE.toString(),
|
||||||
|
@ -314,14 +314,15 @@ public class ImageNode extends AbstractContentNode<Image> {
|
|||||||
*
|
*
|
||||||
* Null implementation of an abstract method.
|
* Null implementation of an abstract method.
|
||||||
*
|
*
|
||||||
* @param attribute correlation attribute instance
|
* @param attributeType the type of the attribute to count
|
||||||
|
* @param attributeValue the value of the attribute to coun
|
||||||
* @param defaultDescription a description to use when none is determined by
|
* @param defaultDescription a description to use when none is determined by
|
||||||
* the getCountPropertyAndDescription method
|
* the getCountPropertyAndDescription method
|
||||||
*
|
*
|
||||||
* @return count property for the underlying content of the node.
|
* @return count property for the underlying content of the node.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected Pair<Long, String> getCountPropertyAndDescription(CorrelationAttributeInstance attribute, String defaultDescription) {
|
protected Pair<Long, String> getCountPropertyAndDescription(CorrelationAttributeInstance.Type attributeType, String attributeValue, String defaultDescription) {
|
||||||
return Pair.of(-1L, NO_DESCR);
|
return Pair.of(-1L, NO_DESCR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -279,14 +279,15 @@ public class VolumeNode extends AbstractContentNode<Volume> {
|
|||||||
*
|
*
|
||||||
* Null implementation of an abstract method.
|
* Null implementation of an abstract method.
|
||||||
*
|
*
|
||||||
* @param attribute correlation attribute instance
|
* @param attributeType the type of the attribute to count
|
||||||
|
* @param attributeValue the value of the attribute to coun
|
||||||
* @param defaultDescription a description to use when none is determined by
|
* @param defaultDescription a description to use when none is determined by
|
||||||
* the getCountPropertyAndDescription method
|
* the getCountPropertyAndDescription method
|
||||||
*
|
*
|
||||||
* @return count property for the underlying content of the node.
|
* @return count property for the underlying content of the node.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected Pair<Long, String> getCountPropertyAndDescription(CorrelationAttributeInstance attribute, String defaultDescription) {
|
protected Pair<Long, String> getCountPropertyAndDescription(CorrelationAttributeInstance.Type attributeType, String attributeValue, String defaultDescription) {
|
||||||
return Pair.of(-1L, NO_DESCR);
|
return Pair.of(-1L, NO_DESCR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ KnownStatusSearchPanel.knownCheckBox.text=Known Status:
|
|||||||
KnownStatusSearchPanel.knownBadOptionCheckBox.text=Notable
|
KnownStatusSearchPanel.knownBadOptionCheckBox.text=Notable
|
||||||
KnownStatusSearchPanel.knownOptionCheckBox.text=Known (NSRL or other)
|
KnownStatusSearchPanel.knownOptionCheckBox.text=Known (NSRL or other)
|
||||||
KnownStatusSearchPanel.unknownOptionCheckBox.text=Unknown
|
KnownStatusSearchPanel.unknownOptionCheckBox.text=Unknown
|
||||||
DateSearchFilter.noneSelectedMsg.text=At least one date type must be selected!
|
DateSearchFilter.noneSelectedMsg.text=At least one date type must be selected\!
|
||||||
DateSearchPanel.dateCheckBox.text=Date:
|
DateSearchPanel.dateCheckBox.text=Date:
|
||||||
DateSearchPanel.jLabel4.text=Timezone:
|
DateSearchPanel.jLabel4.text=Timezone:
|
||||||
DateSearchPanel.jLabel3.text=*The date format is mm/dd/yyyy
|
DateSearchPanel.jLabel3.text=*The date format is mm/dd/yyyy
|
||||||
@ -56,7 +56,7 @@ FileSearchPanel.search.results.details=Large number of matches may impact perfor
|
|||||||
FileSearchPanel.search.exception.noFilterSelected.msg=At least one filter must be selected.
|
FileSearchPanel.search.exception.noFilterSelected.msg=At least one filter must be selected.
|
||||||
FileSearchPanel.search.validationErr.msg=Validation Error: {0}
|
FileSearchPanel.search.validationErr.msg=Validation Error: {0}
|
||||||
FileSearchPanel.emptyWhereClause.text=Invalid options, nothing to show.
|
FileSearchPanel.emptyWhereClause.text=Invalid options, nothing to show.
|
||||||
KnownStatusSearchFilter.noneSelectedMsg.text=At least one known status must be selected!
|
KnownStatusSearchFilter.noneSelectedMsg.text=At least one known status must be selected\!
|
||||||
NameSearchFilter.emptyNameMsg.text=Must enter something for name search.
|
NameSearchFilter.emptyNameMsg.text=Must enter something for name search.
|
||||||
SearchNode.getName.text=Search Result
|
SearchNode.getName.text=Search Result
|
||||||
SizeSearchPanel.sizeCompareComboBox.equalTo=equal to
|
SizeSearchPanel.sizeCompareComboBox.equalTo=equal to
|
||||||
|
@ -140,7 +140,7 @@ IngestJob.cancelReason.outOfDiskSpace.text=Out of disk space
|
|||||||
IngestJob.cancelReason.servicesDown.text=Services Down
|
IngestJob.cancelReason.servicesDown.text=Services Down
|
||||||
IngestJob.cancelReason.caseClosed.text=Case closed
|
IngestJob.cancelReason.caseClosed.text=Case closed
|
||||||
IngestJobSettingsPanel.globalSettingsButton.text=Global Settings
|
IngestJobSettingsPanel.globalSettingsButton.text=Global Settings
|
||||||
gest=
|
gest
|
||||||
IngestJobSettingsPanel.globalSettingsButton.actionCommand=Advanced
|
IngestJobSettingsPanel.globalSettingsButton.actionCommand=Advanced
|
||||||
IngestJobSettingsPanel.globalSettingsButton.text=Global Settings
|
IngestJobSettingsPanel.globalSettingsButton.text=Global Settings
|
||||||
IngestJobSettingsPanel.pastJobsButton.text=History
|
IngestJobSettingsPanel.pastJobsButton.text=History
|
||||||
|
@ -11,7 +11,12 @@ ExtractArchiveWithPasswordAction.progress.text=Unpacking contents of archive: {0
|
|||||||
ExtractArchiveWithPasswordAction.prompt.text=Enter Password
|
ExtractArchiveWithPasswordAction.prompt.text=Enter Password
|
||||||
ExtractArchiveWithPasswordAction.prompt.title=Enter Password
|
ExtractArchiveWithPasswordAction.prompt.title=Enter Password
|
||||||
OpenIDE-Module-Display-Category=Ingest Module
|
OpenIDE-Module-Display-Category=Ingest Module
|
||||||
OpenIDE-Module-Long-Description=Embedded File Extraction Ingest Module\n\nThe Embedded File Extraction Ingest Module processes document files (such as doc, docx, ppt, pptx, xls, xlsx) and archive files (such as zip and others archive types supported by the 7zip extractor).\nContents of these files are extracted and the derived files are added back to the current ingest to be processed by the configured ingest modules.\nIf the derived file happens to be an archive file, it will be re-processed by the 7zip extractor - the extractor will process archive files N-levels deep.\n\nThe extracted files are navigable in the directory tree.\n\nThe module is supported on Windows, Linux and Mac operating systems.
|
OpenIDE-Module-Long-Description=\
|
||||||
|
Embedded File Extraction Ingest Module\n\nThe Embedded File Extraction Ingest Module processes document files (such as doc, docx, ppt, pptx, xls, xlsx) and archive files (such as zip and others archive types supported by the 7zip extractor).\n\
|
||||||
|
Contents of these files are extracted and the derived files are added back to the current ingest to be processed by the configured ingest modules.\n\
|
||||||
|
If the derived file happens to be an archive file, it will be re-processed by the 7zip extractor - the extractor will process archive files N-levels deep.\n\n\
|
||||||
|
The extracted files are navigable in the directory tree.\n\n\
|
||||||
|
The module is supported on Windows, Linux and Mac operating systems.
|
||||||
OpenIDE-Module-Name=Embedded File Extraction
|
OpenIDE-Module-Name=Embedded File Extraction
|
||||||
OpenIDE-Module-Short-Description=Embedded File Extraction Ingest Module
|
OpenIDE-Module-Short-Description=Embedded File Extraction Ingest Module
|
||||||
EmbeddedFileExtractorIngestModule.SevenZipContentReadStream.seek.exception.invalidOrigin=Invalid seek origin: {0}
|
EmbeddedFileExtractorIngestModule.SevenZipContentReadStream.seek.exception.invalidOrigin=Invalid seek origin: {0}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
CannotRunFileTypeDetection=Cannot run file type detection.
|
CannotRunFileTypeDetection=Cannot run file type detection.
|
||||||
ExifParserFileIngestModule.indexError.message=Failed to index EXIF Metadata artifact for keyword search.
|
ExifParserFileIngestModule.indexError.message=Failed to index EXIF Metadata artifact for keyword search.
|
||||||
OpenIDE-Module-Display-Category=Ingest Module
|
OpenIDE-Module-Display-Category=Ingest Module
|
||||||
OpenIDE-Module-Long-Description=Exif metadata ingest module. \n\nThe ingest module analyzes image files, extracts Exif information and posts the Exif data as results.
|
OpenIDE-Module-Long-Description=\
|
||||||
|
Exif metadata ingest module. \n\n\
|
||||||
|
The ingest module analyzes image files, extracts Exif information and posts the Exif data as results.
|
||||||
OpenIDE-Module-Name=ExifParser
|
OpenIDE-Module-Name=ExifParser
|
||||||
OpenIDE-Module-Short-Description=Exif metadata ingest module
|
OpenIDE-Module-Short-Description=Exif metadata ingest module
|
||||||
ExifParserFileIngestModule.moduleName.text=Exif Parser
|
ExifParserFileIngestModule.moduleName.text=Exif Parser
|
||||||
|
@ -36,27 +36,27 @@ FileExtMismatchSettingsPanel.jLabel1.text=File Types:
|
|||||||
FileExtMismatchSettingsPanel.newExtButton.text=New Extension
|
FileExtMismatchSettingsPanel.newExtButton.text=New Extension
|
||||||
FileExtMismatchSettingsPanel.newMimePrompt.message=Add a new MIME file type:
|
FileExtMismatchSettingsPanel.newMimePrompt.message=Add a new MIME file type:
|
||||||
FileExtMismatchSettingsPanel.newMimePrompt.title=New MIME
|
FileExtMismatchSettingsPanel.newMimePrompt.title=New MIME
|
||||||
FileExtMismatchSettingsPanel.newMimePrompt.emptyMime.message=MIME type text is empty!
|
FileExtMismatchSettingsPanel.newMimePrompt.emptyMime.message=MIME type text is empty\!
|
||||||
FileExtMismatchSettingsPanel.newMimePrompt.emptyMime.title=Empty type
|
FileExtMismatchSettingsPanel.newMimePrompt.emptyMime.title=Empty type
|
||||||
FileExtMismatchSettingsPanel.newMimePrompt.mimeTypeNotSupported.message=MIME type not supported!
|
FileExtMismatchSettingsPanel.newMimePrompt.mimeTypeNotSupported.message=MIME type not supported\!
|
||||||
FileExtMismatchSettingsPanel.newMimePrompt.mimeTypeNotSupported.title=Type not supported
|
FileExtMismatchSettingsPanel.newMimePrompt.mimeTypeNotSupported.title=Type not supported
|
||||||
FileExtMismatchSettingsPanel.newMimePrompt.mimeTypeExists.message=MIME type already exists!
|
FileExtMismatchSettingsPanel.newMimePrompt.mimeTypeExists.message=MIME type already exists\!
|
||||||
FileExtMismatchSettingsPanel.newMimePrompt.mimeTypeExists.title=Type already exists
|
FileExtMismatchSettingsPanel.newMimePrompt.mimeTypeExists.title=Type already exists
|
||||||
FileExtMismatchSettingsPanel.newMimePrompt.mimeTypeNotDetectable.message=MIME type is not detectable by this module.
|
FileExtMismatchSettingsPanel.newMimePrompt.mimeTypeNotDetectable.message=MIME type is not detectable by this module.
|
||||||
FileExtMismatchSettingsPanel.newMimePrompt.mimeTypeNotDetectable.title=Type not detectable
|
FileExtMismatchSettingsPanel.newMimePrompt.mimeTypeNotDetectable.title=Type not detectable
|
||||||
FileExtMismatchSettingsPanel.removeTypeButton.noneSelected.message=No MIME type selected!
|
FileExtMismatchSettingsPanel.removeTypeButton.noneSelected.message=No MIME type selected\!
|
||||||
FileExtMismatchSettingsPanel.removeTypeButton.noneSelected.title=No type selected
|
FileExtMismatchSettingsPanel.removeTypeButton.noneSelected.title=No type selected
|
||||||
FileExtMismatchSettingsPanel.newExtPrompt.message=Add an allowed extension:
|
FileExtMismatchSettingsPanel.newExtPrompt.message=Add an allowed extension:
|
||||||
FileExtMismatchSettingsPanel.newExtPrompt.title=New allowed extension
|
FileExtMismatchSettingsPanel.newExtPrompt.title=New allowed extension
|
||||||
FileExtMismatchSettingsPanel.newExtPrompt.empty.message=Extension text is empty!
|
FileExtMismatchSettingsPanel.newExtPrompt.empty.message=Extension text is empty\!
|
||||||
FileExtMismatchSettingsPanel.newExtPrompt.empty.title=Extension text empty
|
FileExtMismatchSettingsPanel.newExtPrompt.empty.title=Extension text empty
|
||||||
FileExtMismatchSettingsPanel.newExtPrompt.noMimeType.message=No MIME type selected!
|
FileExtMismatchSettingsPanel.newExtPrompt.noMimeType.message=No MIME type selected\!
|
||||||
FileExtMismatchSettingsPanel.newExtPrompt.noMimeType.title=No MIME type selected
|
FileExtMismatchSettingsPanel.newExtPrompt.noMimeType.title=No MIME type selected
|
||||||
FileExtMismatchSettingsPanel.newExtPrompt.extExists.message=Extension already exists!
|
FileExtMismatchSettingsPanel.newExtPrompt.extExists.message=Extension already exists\!
|
||||||
FileExtMismatchSettingsPanel.newExtPrompt.extExists.title=Extension already exists
|
FileExtMismatchSettingsPanel.newExtPrompt.extExists.title=Extension already exists
|
||||||
FileExtMismatchSettingsPanel.removeExtButton.noneSelected.message=No extension selected!
|
FileExtMismatchSettingsPanel.removeExtButton.noneSelected.message=No extension selected\!
|
||||||
FileExtMismatchSettingsPanel.removeExtButton.noneSelected.title=No extension selected
|
FileExtMismatchSettingsPanel.removeExtButton.noneSelected.title=No extension selected
|
||||||
FileExtMismatchSettingsPanel.removeExtButton.noMimeTypeSelected.message=No MIME type selected!
|
FileExtMismatchSettingsPanel.removeExtButton.noMimeTypeSelected.message=No MIME type selected\!
|
||||||
FileExtMismatchSettingsPanel.removeExtButton.noMimeTypeSelected.title=No MIME type selected
|
FileExtMismatchSettingsPanel.removeExtButton.noMimeTypeSelected.title=No MIME type selected
|
||||||
FileExtMismatchSettingsPanel.removeTypeButton.toolTipText=
|
FileExtMismatchSettingsPanel.removeTypeButton.toolTipText=
|
||||||
FileExtMismatchModuleSettingsPanel.checkAllRadioButton.text=Check all file types
|
FileExtMismatchModuleSettingsPanel.checkAllRadioButton.text=Check all file types
|
||||||
|
@ -40,7 +40,10 @@ ImportCentralRepoDbProgressDialog.errorParsingFile.message=Error parsing hash se
|
|||||||
ImportCentralRepoDbProgressDialog.linesProcessed.message=\ hashes processed
|
ImportCentralRepoDbProgressDialog.linesProcessed.message=\ hashes processed
|
||||||
ImportCentralRepoDbProgressDialog.title.text=Central Repository Import Progress
|
ImportCentralRepoDbProgressDialog.title.text=Central Repository Import Progress
|
||||||
OpenIDE-Module-Display-Category=Ingest Module
|
OpenIDE-Module-Display-Category=Ingest Module
|
||||||
OpenIDE-Module-Long-Description=Hash Set ingest module. \n\nThe ingest module analyzes files in the disk image and marks them as "known" (based on NSRL hashset lookup for "known" files) and "bad / interesting" (based on one or more hash sets supplied by the user).\n\nThe module also contains additional non-ingest tools that are integrated in the GUI, such as file lookup by hash and hash set configuration.
|
OpenIDE-Module-Long-Description=\
|
||||||
|
Hash Set ingest module. \n\n\
|
||||||
|
The ingest module analyzes files in the disk image and marks them as "known" (based on NSRL hashset lookup for "known" files) and "bad / interesting" (based on one or more hash sets supplied by the user).\n\n\
|
||||||
|
The module also contains additional non-ingest tools that are integrated in the GUI, such as file lookup by hash and hash set configuration.
|
||||||
OpenIDE-Module-Name=HashDatabases
|
OpenIDE-Module-Name=HashDatabases
|
||||||
OptionsCategory_Name_HashDatabase=Hash Sets
|
OptionsCategory_Name_HashDatabase=Hash Sets
|
||||||
OptionsCategory_Keywords_HashDatabase=Hash Sets
|
OptionsCategory_Keywords_HashDatabase=Hash Sets
|
||||||
@ -169,7 +172,10 @@ HashDbSearchThread.name.searching=Searching
|
|||||||
HashDbSearchThread.noMoreFilesWithMD5Msg=No other files with the same MD5 hash were found.
|
HashDbSearchThread.noMoreFilesWithMD5Msg=No other files with the same MD5 hash were found.
|
||||||
ModalNoButtons.indexingDbsTitle=Indexing hash sets
|
ModalNoButtons.indexingDbsTitle=Indexing hash sets
|
||||||
ModalNoButtons.indexingDbTitle=Indexing hash set
|
ModalNoButtons.indexingDbTitle=Indexing hash set
|
||||||
ModalNoButtons.exitHashDbIndexingMsg=You are about to exit out of indexing your hash sets. \nThe generated index will be left unusable. If you choose to continue,\nplease delete the corresponding -md5.idx file in the hash folder.\nExit indexing?
|
ModalNoButtons.exitHashDbIndexingMsg=You are about to exit out of indexing your hash sets. \n\
|
||||||
|
The generated index will be left unusable. If you choose to continue,\n\
|
||||||
|
please delete the corresponding -md5.idx file in the hash folder.\n\
|
||||||
|
Exit indexing?
|
||||||
ModalNoButtons.dlgTitle.unfinishedIndexing=Unfinished Indexing
|
ModalNoButtons.dlgTitle.unfinishedIndexing=Unfinished Indexing
|
||||||
ModalNoButtons.indexThis.currentlyIndexing1Db=Currently indexing 1 hash set
|
ModalNoButtons.indexThis.currentlyIndexing1Db=Currently indexing 1 hash set
|
||||||
ModalNoButtons.indexThese.currentlyIndexing1OfNDbs=Currently indexing 1 of {0}
|
ModalNoButtons.indexThese.currentlyIndexing1OfNDbs=Currently indexing 1 of {0}
|
||||||
|
@ -6,7 +6,7 @@ OptionsCategory_Name_InterestingItemDefinitions=Interesting Files
|
|||||||
OptionsCategory_Keywords_InterestingItemDefinitions=InterestingItemDefinitions
|
OptionsCategory_Keywords_InterestingItemDefinitions=InterestingItemDefinitions
|
||||||
InterestingItemsIdentifierIngestModule.moduleName=Interesting Files Identifier
|
InterestingItemsIdentifierIngestModule.moduleName=Interesting Files Identifier
|
||||||
InterestingItemsIdentifierIngestModule.moduleDescription=Identifies interesting items as defined by interesting item rule sets.
|
InterestingItemsIdentifierIngestModule.moduleDescription=Identifies interesting items as defined by interesting item rule sets.
|
||||||
FilesSetPanel.interesting.title=Interesting Files Set
|
FilesSetPanel.interesting.title=Interesting Files Set Rule
|
||||||
FilesSetPanel.interesting.messages.filesSetsMustBeNamed=Interesting files sets must be named.
|
FilesSetPanel.interesting.messages.filesSetsMustBeNamed=Interesting files sets must be named.
|
||||||
FilesSetPanel.messages.filesSetsReservedName=You have chosen a name reserved by the software, please choose a different name.
|
FilesSetPanel.messages.filesSetsReservedName=You have chosen a name reserved by the software, please choose a different name.
|
||||||
FilesSetPanel.ignoreKnownFilesCheckbox.text=Ignore Known Files
|
FilesSetPanel.ignoreKnownFilesCheckbox.text=Ignore Known Files
|
||||||
@ -31,13 +31,13 @@ FilesSetRulePanel.messages.invalidCharInName=The name cannot contain \\, /, :, *
|
|||||||
FilesSetRulePanel.messages.invalidCharInPath=The path cannot contain \\, :, *, ?, \", <, or > unless it is a regular expression.
|
FilesSetRulePanel.messages.invalidCharInPath=The path cannot contain \\, :, *, ?, \", <, or > unless it is a regular expression.
|
||||||
FilesSetRulePanel.messages.invalidPathRegex=The path regular expression is not valid:\n\n{0}
|
FilesSetRulePanel.messages.invalidPathRegex=The path regular expression is not valid:\n\n{0}
|
||||||
FilesSetDefsPanel.doFileSetsDialog.duplicateRuleSet.text=Rule set with name {0} already exists.
|
FilesSetDefsPanel.doFileSetsDialog.duplicateRuleSet.text=Rule set with name {0} already exists.
|
||||||
FilesSetRulePanel.pathSeparatorInfoLabel.text=Use / as path separator
|
FilesSetRulePanel.pathSeparatorInfoLabel.text=Folder must be in parent path. Use '/' to give consecutive names
|
||||||
FilesIdentifierIngestJobSettingsPanel.border.title=Select interesting files sets to enable during ingest:
|
FilesIdentifierIngestJobSettingsPanel.border.title=Select interesting files sets to enable during ingest:
|
||||||
FilesSetRulePanel.jLabel1.text=Type:
|
FilesSetRulePanel.jLabel1.text=Type:
|
||||||
FilesSetRulePanel.interesting.jLabel5.text=Enter information about files that you want to find.
|
FilesSetRulePanel.interesting.jLabel5.text=Enter information about files that you want to find.
|
||||||
FilesSetRulePanel.ingest.jLabel5.text=Enter information about files that you want to run ingest on.
|
FilesSetRulePanel.ingest.jLabel5.text=Enter information about files that you want to run ingest on.
|
||||||
FilesSetRulePanel.nameCheck.text=Name:
|
FilesSetRulePanel.nameCheck.text=Name:
|
||||||
FilesSetRulePanel.pathCheck.text=Path Substring:
|
FilesSetRulePanel.pathCheck.text=Folder Name:
|
||||||
FilesSetRulePanel.filesRadioButton.text=Files
|
FilesSetRulePanel.filesRadioButton.text=Files
|
||||||
FilesSetRulePanel.dirsRadioButton.text=Directories
|
FilesSetRulePanel.dirsRadioButton.text=Directories
|
||||||
FilesSetDefsPanel.interesting.setsListLabel.text=Rule Sets:
|
FilesSetDefsPanel.interesting.setsListLabel.text=Rule Sets:
|
||||||
|
@ -2,6 +2,7 @@ FilesIdentifierIngestJobSettingsPanel.getError=Error getting interesting files s
|
|||||||
FilesIdentifierIngestJobSettingsPanel.updateError=Error updating interesting files sets settings file.
|
FilesIdentifierIngestJobSettingsPanel.updateError=Error updating interesting files sets settings file.
|
||||||
FilesIdentifierIngestModule.getFilesError=Error getting interesting files sets from file.
|
FilesIdentifierIngestModule.getFilesError=Error getting interesting files sets from file.
|
||||||
FilesIdentifierIngestModule.indexError.message=Failed to index interesting file hit artifact for keyword search.
|
FilesIdentifierIngestModule.indexError.message=Failed to index interesting file hit artifact for keyword search.
|
||||||
|
# {0} - daysIncluded
|
||||||
FilesSet.rule.dateRule.toString=(modified within {0} day(s))
|
FilesSet.rule.dateRule.toString=(modified within {0} day(s))
|
||||||
FilesSetDefsPanel.bytes=Bytes
|
FilesSetDefsPanel.bytes=Bytes
|
||||||
FilesSetDefsPanel.cancelImportMsg=Cancel import
|
FilesSetDefsPanel.cancelImportMsg=Cancel import
|
||||||
@ -36,6 +37,8 @@ FilesSetPanel.ingest.createNewFilter=Create/edit file ingest filters...
|
|||||||
FilesSetPanel.ingest.messages.filtersMustBeNamed=File ingest filters must be named.
|
FilesSetPanel.ingest.messages.filtersMustBeNamed=File ingest filters must be named.
|
||||||
FilesSetPanel.rule.title=File Filter Rule
|
FilesSetPanel.rule.title=File Filter Rule
|
||||||
FilesSetRulePanel.bytes=Bytes
|
FilesSetRulePanel.bytes=Bytes
|
||||||
|
#{0} - regex
|
||||||
|
FilesSetRulePanel.CommaInRegexWarning=Warning: Comma(s) in the file extension field will be interpreted as part of a regex and will not split the entry into multiple extensions (Entered: "{0}")
|
||||||
FilesSetRulePanel.DaysIncludedEmptyError=Number of days included cannot be empty.
|
FilesSetRulePanel.DaysIncludedEmptyError=Number of days included cannot be empty.
|
||||||
FilesSetRulePanel.DaysIncludedInvalidError=Number of days included must be a positive integer.
|
FilesSetRulePanel.DaysIncludedInvalidError=Number of days included must be a positive integer.
|
||||||
FilesSetRulePanel.gigaBytes=Gigabytes
|
FilesSetRulePanel.gigaBytes=Gigabytes
|
||||||
@ -59,7 +62,7 @@ OptionsCategory_Name_InterestingItemDefinitions=Interesting Files
|
|||||||
OptionsCategory_Keywords_InterestingItemDefinitions=InterestingItemDefinitions
|
OptionsCategory_Keywords_InterestingItemDefinitions=InterestingItemDefinitions
|
||||||
InterestingItemsIdentifierIngestModule.moduleName=Interesting Files Identifier
|
InterestingItemsIdentifierIngestModule.moduleName=Interesting Files Identifier
|
||||||
InterestingItemsIdentifierIngestModule.moduleDescription=Identifies interesting items as defined by interesting item rule sets.
|
InterestingItemsIdentifierIngestModule.moduleDescription=Identifies interesting items as defined by interesting item rule sets.
|
||||||
FilesSetPanel.interesting.title=Interesting Files Set
|
FilesSetPanel.interesting.title=Interesting Files Set Rule
|
||||||
FilesSetPanel.interesting.messages.filesSetsMustBeNamed=Interesting files sets must be named.
|
FilesSetPanel.interesting.messages.filesSetsMustBeNamed=Interesting files sets must be named.
|
||||||
FilesSetPanel.messages.filesSetsReservedName=You have chosen a name reserved by the software, please choose a different name.
|
FilesSetPanel.messages.filesSetsReservedName=You have chosen a name reserved by the software, please choose a different name.
|
||||||
FilesSetPanel.ignoreKnownFilesCheckbox.text=Ignore Known Files
|
FilesSetPanel.ignoreKnownFilesCheckbox.text=Ignore Known Files
|
||||||
@ -80,17 +83,17 @@ FilesSetRulePanel.nameTextField.text=
|
|||||||
FilesSetRulePanel.ruleNameLabel.text=Rule Name (Optional):
|
FilesSetRulePanel.ruleNameLabel.text=Rule Name (Optional):
|
||||||
FilesSetRulePanel.messages.emptyNameCondition=You must specify a name pattern for this rule.
|
FilesSetRulePanel.messages.emptyNameCondition=You must specify a name pattern for this rule.
|
||||||
FilesSetRulePanel.messages.invalidNameRegex=The name regular expression is not valid:\n\n{0}
|
FilesSetRulePanel.messages.invalidNameRegex=The name regular expression is not valid:\n\n{0}
|
||||||
FilesSetRulePanel.messages.invalidCharInName=The name cannot contain \\, /, :, *, ?, ", <, or > unless it is a regular expression.
|
FilesSetRulePanel.messages.invalidCharInName=The name cannot contain \\, /, :, *, ?, \", <, or > unless it is a regular expression.
|
||||||
FilesSetRulePanel.messages.invalidCharInPath=The path cannot contain \\, :, *, ?, ", <, or > unless it is a regular expression.
|
FilesSetRulePanel.messages.invalidCharInPath=The path cannot contain \\, :, *, ?, \", <, or > unless it is a regular expression.
|
||||||
FilesSetRulePanel.messages.invalidPathRegex=The path regular expression is not valid:\n\n{0}
|
FilesSetRulePanel.messages.invalidPathRegex=The path regular expression is not valid:\n\n{0}
|
||||||
FilesSetDefsPanel.doFileSetsDialog.duplicateRuleSet.text=Rule set with name {0} already exists.
|
FilesSetDefsPanel.doFileSetsDialog.duplicateRuleSet.text=Rule set with name {0} already exists.
|
||||||
FilesSetRulePanel.pathSeparatorInfoLabel.text=Use / as path separator
|
FilesSetRulePanel.pathSeparatorInfoLabel.text=Folder must be in parent path. Use '/' to give consecutive names
|
||||||
FilesIdentifierIngestJobSettingsPanel.border.title=Select interesting files sets to enable during ingest:
|
FilesIdentifierIngestJobSettingsPanel.border.title=Select interesting files sets to enable during ingest:
|
||||||
FilesSetRulePanel.jLabel1.text=Type:
|
FilesSetRulePanel.jLabel1.text=Type:
|
||||||
FilesSetRulePanel.interesting.jLabel5.text=Enter information about files that you want to find.
|
FilesSetRulePanel.interesting.jLabel5.text=Enter information about files that you want to find.
|
||||||
FilesSetRulePanel.ingest.jLabel5.text=Enter information about files that you want to run ingest on.
|
FilesSetRulePanel.ingest.jLabel5.text=Enter information about files that you want to run ingest on.
|
||||||
FilesSetRulePanel.nameCheck.text=Name:
|
FilesSetRulePanel.nameCheck.text=Name:
|
||||||
FilesSetRulePanel.pathCheck.text=Path Substring:
|
FilesSetRulePanel.pathCheck.text=Folder Name:
|
||||||
FilesSetRulePanel.filesRadioButton.text=Files
|
FilesSetRulePanel.filesRadioButton.text=Files
|
||||||
FilesSetRulePanel.dirsRadioButton.text=Directories
|
FilesSetRulePanel.dirsRadioButton.text=Directories
|
||||||
FilesSetDefsPanel.interesting.setsListLabel.text=Rule Sets:
|
FilesSetDefsPanel.interesting.setsListLabel.text=Rule Sets:
|
||||||
|
@ -832,6 +832,7 @@
|
|||||||
<Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
<Property name="background" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
||||||
<Color blue="f0" green="f0" red="f0" type="rgb"/>
|
<Color blue="f0" green="f0" red="f0" type="rgb"/>
|
||||||
</Property>
|
</Property>
|
||||||
|
<Property name="editable" type="boolean" value="true"/>
|
||||||
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
<Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||||
<Connection code="new javax.swing.DefaultComboBoxModel<String>(new String[] {""})" type="code"/>
|
<Connection code="new javax.swing.DefaultComboBoxModel<String>(new String[] {""})" type="code"/>
|
||||||
</Property>
|
</Property>
|
||||||
|
@ -811,6 +811,7 @@ public final class FilesSetDefsPanel extends IngestModuleGlobalSettingsPanel imp
|
|||||||
org.openide.awt.Mnemonics.setLocalizedText(jLabel7, org.openide.util.NbBundle.getMessage(FilesSetDefsPanel.class, "FilesSetDefsPanel.jLabel7.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(jLabel7, org.openide.util.NbBundle.getMessage(FilesSetDefsPanel.class, "FilesSetDefsPanel.jLabel7.text")); // NOI18N
|
||||||
|
|
||||||
mimeTypeComboBox.setBackground(new java.awt.Color(240, 240, 240));
|
mimeTypeComboBox.setBackground(new java.awt.Color(240, 240, 240));
|
||||||
|
mimeTypeComboBox.setEditable(true);
|
||||||
mimeTypeComboBox.setModel(new javax.swing.DefaultComboBoxModel<String>(new String[] {""}));
|
mimeTypeComboBox.setModel(new javax.swing.DefaultComboBoxModel<String>(new String[] {""}));
|
||||||
mimeTypeComboBox.setEnabled(false);
|
mimeTypeComboBox.setEnabled(false);
|
||||||
mimeTypeComboBox.setMinimumSize(new java.awt.Dimension(0, 20));
|
mimeTypeComboBox.setMinimumSize(new java.awt.Dimension(0, 20));
|
||||||
|
@ -57,7 +57,9 @@ final class FilesSetRulePanel extends javax.swing.JPanel {
|
|||||||
"FilesSetRulePanel.NoPathError=Path cannot be empty",
|
"FilesSetRulePanel.NoPathError=Path cannot be empty",
|
||||||
"FilesSetRulePanel.DaysIncludedEmptyError=Number of days included cannot be empty.",
|
"FilesSetRulePanel.DaysIncludedEmptyError=Number of days included cannot be empty.",
|
||||||
"FilesSetRulePanel.DaysIncludedInvalidError=Number of days included must be a positive integer.",
|
"FilesSetRulePanel.DaysIncludedInvalidError=Number of days included must be a positive integer.",
|
||||||
"FilesSetRulePanel.ZeroFileSizeError=File size condition value must not be 0 (Unless = is selected)."
|
"FilesSetRulePanel.ZeroFileSizeError=File size condition value must not be 0 (Unless = is selected).",
|
||||||
|
"#{0} - regex",
|
||||||
|
"FilesSetRulePanel.CommaInRegexWarning=Warning: Comma(s) in the file extension field will be interpreted as part of a regex and will not split the entry into multiple extensions (Entered: \"{0}\")",
|
||||||
})
|
})
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
@ -130,6 +132,7 @@ final class FilesSetRulePanel extends javax.swing.JPanel {
|
|||||||
this.setButtons(okButton, cancelButton);
|
this.setButtons(okButton, cancelButton);
|
||||||
|
|
||||||
updateNameTextFieldPrompt();
|
updateNameTextFieldPrompt();
|
||||||
|
setComponentsForSearchType();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -358,6 +361,16 @@ final class FilesSetRulePanel extends javax.swing.JPanel {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (this.nameRegexCheckbox.isSelected()) {
|
if (this.nameRegexCheckbox.isSelected()) {
|
||||||
|
|
||||||
|
// If extension is also selected and the regex contains a comma, display a warning
|
||||||
|
// since it is unclear whether the comma is part of a regex or is separating extensions.
|
||||||
|
if (this.extensionRadioButton.isSelected() && this.nameTextField.getText().contains(",")) {
|
||||||
|
NotifyDescriptor notifyDesc = new NotifyDescriptor.Message(
|
||||||
|
Bundle.FilesSetRulePanel_CommaInRegexWarning(this.nameTextField.getText()),
|
||||||
|
NotifyDescriptor.WARNING_MESSAGE);
|
||||||
|
DialogDisplayer.getDefault().notify(notifyDesc);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Pattern.compile(this.nameTextField.getText());
|
Pattern.compile(this.nameTextField.getText());
|
||||||
} catch (PatternSyntaxException ex) {
|
} catch (PatternSyntaxException ex) {
|
||||||
|
@ -21,7 +21,7 @@ PhotoRecIngestModule.complete.totalParsetime=Total Parsing Time:
|
|||||||
PhotoRecIngestModule.complete.photoRecResults=PhotoRec Results
|
PhotoRecIngestModule.complete.photoRecResults=PhotoRec Results
|
||||||
PhotoRecIngestModule.NotEnoughDiskSpace.detail.msg=PhotoRec error processing {0} with {1} Not enough space on primary disk to save unallocated space.
|
PhotoRecIngestModule.NotEnoughDiskSpace.detail.msg=PhotoRec error processing {0} with {1} Not enough space on primary disk to save unallocated space.
|
||||||
PhotoRecIngestModule.cancelledByUser=PhotoRec cancelled by user.
|
PhotoRecIngestModule.cancelledByUser=PhotoRec cancelled by user.
|
||||||
PhotoRecIngestModule.error.exitValue=PhotoRec carver returned error exit value = {0} when scanning {1}
|
PhotoRecIngestModule.error.exitValue=PhotoRec carver returned error exit value \= {0} when scanning {1}
|
||||||
PhotoRecIngestModule.error.msg=Error processing {0} with PhotoRec carver.
|
PhotoRecIngestModule.error.msg=Error processing {0} with PhotoRec carver.
|
||||||
PhotoRecIngestModule.complete.numberOfErrors=Number of Errors while Carving:
|
PhotoRecIngestModule.complete.numberOfErrors=Number of Errors while Carving:
|
||||||
PhotoRecCarverIngestJobSettingsPanel.detectionSettingsLabel.text=PhotoRec Settings
|
PhotoRecCarverIngestJobSettingsPanel.detectionSettingsLabel.text=PhotoRec Settings
|
||||||
|
@ -99,7 +99,7 @@ FileReportDataTypes.path.text=Full Path
|
|||||||
FileReportText.getName.text=Files - Text
|
FileReportText.getName.text=Files - Text
|
||||||
FileReportText.getDesc.text=A delimited text file containing information about individual files in the case.
|
FileReportText.getDesc.text=A delimited text file containing information about individual files in the case.
|
||||||
ReportBodyFile.progress.querying=Querying files...
|
ReportBodyFile.progress.querying=Querying files...
|
||||||
ReportBodyFile.ingestWarning.text=Warning, this report was run before ingest services completed!
|
ReportBodyFile.ingestWarning.text=Warning, this report was run before ingest services completed\!
|
||||||
ReportBodyFile.progress.loading=Loading files...
|
ReportBodyFile.progress.loading=Loading files...
|
||||||
ReportBodyFile.progress.processing=Now processing {0}...
|
ReportBodyFile.progress.processing=Now processing {0}...
|
||||||
ReportBodyFile.getName.text=TSK Body File
|
ReportBodyFile.getName.text=TSK Body File
|
||||||
@ -241,13 +241,13 @@ ReportHTML.getName.text=HTML Report
|
|||||||
ReportHTML.getDesc.text=A report about results and tagged items in HTML format.
|
ReportHTML.getDesc.text=A report about results and tagged items in HTML format.
|
||||||
ReportHTML.writeIndex.title=for case {0}
|
ReportHTML.writeIndex.title=for case {0}
|
||||||
ReportHTML.writeIndex.noFrames.msg=Your browser is not compatible with our frame setup.
|
ReportHTML.writeIndex.noFrames.msg=Your browser is not compatible with our frame setup.
|
||||||
ReportHTML.writeIndex.noFrames.seeNav=Please see <a href="content\nav.html">the navigation page</a> for artifact links,
|
ReportHTML.writeIndex.noFrames.seeNav=Please see <a href\="content\nav.html">the navigation page</a> for artifact links,
|
||||||
ReportHTML.writeIndex.seeSum=and <a href="contentsummary.html">the summary page</a> for a case summary.
|
ReportHTML.writeIndex.seeSum=and <a href\="content\summary.html">the summary page</a> for a case summary.
|
||||||
ReportHTML.writeNav.title=Report Navigation
|
ReportHTML.writeNav.title=Report Navigation
|
||||||
ReportHTML.writeNav.h1=Report Navigation
|
ReportHTML.writeNav.h1=Report Navigation
|
||||||
ReportHTML.writeNav.summary=Case Summary
|
ReportHTML.writeNav.summary=Case Summary
|
||||||
ReportHTML.writeSum.title=Case Summary
|
ReportHTML.writeSum.title=Case Summary
|
||||||
ReportHTML.writeSum.warningMsg=<span>Warning, this report was run before ingest services completed!</span>
|
ReportHTML.writeSum.warningMsg=<span>Warning, this report was run before ingest services completed\!</span>
|
||||||
#
|
#
|
||||||
# autopsy/test/scripts/regression.py._html_report_diff() uses reportGenOn.text, caseName, caseNum,
|
# autopsy/test/scripts/regression.py._html_report_diff() uses reportGenOn.text, caseName, caseNum,
|
||||||
# examiner as a regex signature to skip report.html and summary.html
|
# examiner as a regex signature to skip report.html and summary.html
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/*=
|
/*
|
||||||
* Autopsy Forensic Browser
|
* Autopsy Forensic Browser
|
||||||
*
|
*
|
||||||
* Copyright 2013-15 Basis Technology Corp.
|
* Copyright 2013-15 Basis Technology Corp.
|
||||||
@ -14,8 +14,8 @@
|
|||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
*=limitations under the License.
|
* limitations under the License.
|
||||||
*/=
|
*/
|
||||||
|
|
||||||
AbstractTimelineChart.defaultTooltip.text=Drag the mouse to select a time interval to zoom into.\nRight-click for more actions.
|
AbstractTimelineChart.defaultTooltip.text=Drag the mouse to select a time interval to zoom into.\nRight-click for more actions.
|
||||||
HistoryToolBar.historyLabel.text=History
|
HistoryToolBar.historyLabel.text=History
|
||||||
|
@ -42,7 +42,7 @@ The top line allows you to choose whether you want to match only files, only dir
|
|||||||
Each rule must have at least one condition. To create conditions, check the box to the left of the condition you want to enable. The following is a description of each condition, with some full examples after.
|
Each rule must have at least one condition. To create conditions, check the box to the left of the condition you want to enable. The following is a description of each condition, with some full examples after.
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li><b>Name</b> - Enter either the full file name or one or more extensions, and select whether this is an exact match or a substring/regex match. If substring/regex match is enabled, it will automatically add wildcards to the beginning and end of the text. If you're only matching directories, this will match the directory name. If you're using a comma-separated list of extensions, make sure the regex checkbox is disabled - the two features do not work together. The following table shows some examples of what the different combinations can be used for.
|
<li><b>Name</b> - Enter either the full file name or one or more extensions, and select whether this is an exact match or a substring/regex match. If substring/regex match is enabled, it will automatically add wildcards to the beginning and end of the text. If you're only matching directories, this will match the directory name. If you're using a comma-separated list of extensions, make sure the regex checkbox is disabled - the entire contents will be interpreted as one regex when the checkbox is selected. The following table shows some examples of what the different combinations can be used for.
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr><th>Type</th><th>Substring/Regex</th><th>Text</th><th>Description</th><th>Sample match</th></tr>
|
<tr><th>Type</th><th>Substring/Regex</th><th>Text</th><th>Description</th><th>Sample match</th></tr>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user