mirror of
https://github.com/overcuriousity/autopsy-flatpak.git
synced 2025-07-16 01:37:43 +00:00
Merge pull request #3575 from dgrove727/3595_DeclutterLocalDiskPanel
3595 declutter local disk panel
This commit is contained in:
commit
d1c252f15b
@ -27,11 +27,9 @@ OpenRecentCasePanel.openButton.text=Open
|
|||||||
ImageFilePanel.pathLabel.text=Browse for an image file:
|
ImageFilePanel.pathLabel.text=Browse for an image file:
|
||||||
ImageFilePanel.browseButton.text=Browse
|
ImageFilePanel.browseButton.text=Browse
|
||||||
ImageFilePanel.pathTextField.text=
|
ImageFilePanel.pathTextField.text=
|
||||||
LocalDiskPanel.diskLabel.text=Select a local disk:
|
|
||||||
MissingImageDialog.selectButton.text=Select Image
|
MissingImageDialog.selectButton.text=Select Image
|
||||||
MissingImageDialog.titleLabel.text=Search for missing image
|
MissingImageDialog.titleLabel.text=Search for missing image
|
||||||
MissingImageDialog.cancelButton.text=Cancel
|
MissingImageDialog.cancelButton.text=Cancel
|
||||||
LocalDiskPanel.errorLabel.text=Error Label
|
|
||||||
AddImageWizardAddingProgressVisual.statusLabel.text=Data source has been added to the local database. Files are being analyzed.
|
AddImageWizardAddingProgressVisual.statusLabel.text=Data source has been added to the local database. Files are being analyzed.
|
||||||
AddImageWizardAddingProgressVisual.progressLabel.text=<progress>
|
AddImageWizardAddingProgressVisual.progressLabel.text=<progress>
|
||||||
AddImageWizardAddingProgressVisual.viewLogButton.text=View Log
|
AddImageWizardAddingProgressVisual.viewLogButton.text=View Log
|
||||||
@ -40,14 +38,10 @@ ImageFilePanel.timeZoneLabel.text=Please select the input timezone:
|
|||||||
ImageFilePanel.noFatOrphansCheckbox.text=Ignore orphan files in FAT file systems
|
ImageFilePanel.noFatOrphansCheckbox.text=Ignore orphan files in FAT file systems
|
||||||
ImageFilePanel.noFatOrphansCheckbox.toolTipText=
|
ImageFilePanel.noFatOrphansCheckbox.toolTipText=
|
||||||
ImageFilePanel.descLabel.text=(faster results, although some data will not be searched)
|
ImageFilePanel.descLabel.text=(faster results, although some data will not be searched)
|
||||||
LocalDiskPanel.timeZoneLabel.text=Please select the input timezone:
|
LocalDiskPanel.timeZoneLabel.text=Timezone:
|
||||||
LocalDiskPanel.noFatOrphansCheckbox.toolTipText=
|
LocalDiskPanel.noFatOrphansCheckbox.toolTipText=
|
||||||
LocalDiskPanel.noFatOrphansCheckbox.text=Ignore orphan files in FAT file systems
|
LocalDiskPanel.noFatOrphansCheckbox.text=Ignore orphan files in FAT file systems
|
||||||
LocalDiskPanel.descLabel.text=(faster results, although some data will not be searched)
|
LocalDiskPanel.descLabel.text=(faster results, although some data will not be searched)
|
||||||
LocalDiskPanel.imageWriterDirError.text=Error - directory does not exist
|
|
||||||
LocalDiskPanel.imageWriterEmptyPathError.text=Error - enter path for VHD
|
|
||||||
LocalDiskPanel.imageWriterIsDirError.text=Error - VHD path is a directory
|
|
||||||
LocalDiskPanel.imageWriterFileExistsError.text=Error - VHD path already exists
|
|
||||||
MissingImageDialog.browseButton.text=Browse
|
MissingImageDialog.browseButton.text=Browse
|
||||||
MissingImageDialog.pathNameTextField.text=
|
MissingImageDialog.pathNameTextField.text=
|
||||||
AddImageWizardAddingProgressVisual.progressTextArea.border.title=Status
|
AddImageWizardAddingProgressVisual.progressTextArea.border.title=Status
|
||||||
@ -115,16 +109,6 @@ CueBannerPanel.title.text=Open Recent Case
|
|||||||
ImageDSProcessor.dsType.text=Disk Image or VM File
|
ImageDSProcessor.dsType.text=Disk Image or VM File
|
||||||
ImageDSProcessor.allDesc.text=All Supported Types
|
ImageDSProcessor.allDesc.text=All Supported Types
|
||||||
LocalDiskDSProcessor.dsType.text=Local Disk
|
LocalDiskDSProcessor.dsType.text=Local Disk
|
||||||
LocalDiskPanel.localDiskModel.loading.msg=Loading local disks...
|
|
||||||
LocalDiskPanel.localDiskModel.nodrives.msg=No Accessible Drives
|
|
||||||
LocalDiskPanel.moduleErr=Module Error
|
|
||||||
LocalDiskPanel.moduleErr.msg=A module caused an error listening to LocalDiskPanel updates. See log to determine which module. Some data could be incomplete.
|
|
||||||
LocalDiskPanel.errLabel.disksNotDetected.text=Disks were not detected. On some systems it requires admin privileges (or "Run as administrator").
|
|
||||||
LocalDiskPanel.errLabel.disksNotDetected.toolTipText=Disks were not detected. On some systems it requires admin privileges (or "Run as administrator").
|
|
||||||
LocalDiskPanel.errLabel.drivesNotDetected.text=Local drives were not detected. Auto-detection not supported on this OS or admin privileges required
|
|
||||||
LocalDiskPanel.errLabel.drivesNotDetected.toolTipText=Local drives were not detected. Auto-detection not supported on this OS or admin privileges required
|
|
||||||
LocalDiskPanel.errLabel.someDisksNotDetected.text=Some disks were not detected. On some systems it requires admin privileges (or "Run as administrator").
|
|
||||||
LocalDiskPanel.errLabel.someDisksNotDetected.toolTipText=Some disks were not detected. On some systems it requires admin privileges (or "Run as administrator").
|
|
||||||
LocalFilesDSProcessor.dsType=Logical Files
|
LocalFilesDSProcessor.dsType=Logical Files
|
||||||
LocalFilesDSProcessor.toString.text=Logical Files
|
LocalFilesDSProcessor.toString.text=Logical Files
|
||||||
LocalFilesPanel.contentType.text=LOCAL
|
LocalFilesPanel.contentType.text=LOCAL
|
||||||
@ -184,7 +168,6 @@ IngestJobInfoPanel.jLabel1.text=Ingest Modules
|
|||||||
IngestJobInfoPanel.jLabel2.text=Ingest Jobs
|
IngestJobInfoPanel.jLabel2.text=Ingest Jobs
|
||||||
CaseInformationPanel.closeButton.text=Close
|
CaseInformationPanel.closeButton.text=Close
|
||||||
LocalDiskPanel.copyImageCheckbox.text=Make a VHD image of the drive while it is being analyzed
|
LocalDiskPanel.copyImageCheckbox.text=Make a VHD image of the drive while it is being analyzed
|
||||||
LocalDiskPanel.imageWriterErrorLabel.text=Error Label
|
|
||||||
LocalDiskPanel.jLabel1.text=Note that at least one ingest module must be run to create a complete copy
|
LocalDiskPanel.jLabel1.text=Note that at least one ingest module must be run to create a complete copy
|
||||||
LocalDiskPanel.pathTextField.text=
|
LocalDiskPanel.pathTextField.text=
|
||||||
LocalDiskPanel.browseButton.text=Browse
|
LocalDiskPanel.browseButton.text=Browse
|
||||||
@ -220,7 +203,6 @@ MultiUserCasesPanel.cancelButton.text=Cancel
|
|||||||
ImageFilePanel.pathErrorLabel.text=Error Label
|
ImageFilePanel.pathErrorLabel.text=Error Label
|
||||||
ImageFilePanel.sectorSizeLabel.text=Sector size:
|
ImageFilePanel.sectorSizeLabel.text=Sector size:
|
||||||
LocalDiskPanel.sectorSizeLabel.text=Sector Size:
|
LocalDiskPanel.sectorSizeLabel.text=Sector Size:
|
||||||
LocalDiskPanel.refreshTableButton.text=Refresh Local Disks
|
|
||||||
LocalFilesPanel.displayNameLabel.text=Logical File Set Display Name: Default
|
LocalFilesPanel.displayNameLabel.text=Logical File Set Display Name: Default
|
||||||
LocalFilesPanel.errorLabel.text=Error Label
|
LocalFilesPanel.errorLabel.text=Error Label
|
||||||
LocalFilesPanel.selectedPaths.toolTipText=
|
LocalFilesPanel.selectedPaths.toolTipText=
|
||||||
@ -241,3 +223,12 @@ LogicalEvidenceFilePanel.logicalEvidenceFileChooser.approveButtonToolTipText=
|
|||||||
LogicalEvidenceFilePanel.logicalEvidenceFileChooser.approveButtonText=Select
|
LogicalEvidenceFilePanel.logicalEvidenceFileChooser.approveButtonText=Select
|
||||||
LogicalEvidenceFilePanel.logicalEvidencePathField.text=
|
LogicalEvidenceFilePanel.logicalEvidencePathField.text=
|
||||||
LocalFilesPanel.changeNameButton.text=Change
|
LocalFilesPanel.changeNameButton.text=Change
|
||||||
|
LocalDiskPanel.selectDiskButton.text=Select Disk
|
||||||
|
LocalDiskSelectionDialog.refreshLocalDisksButton.text=Refresh Local Disks
|
||||||
|
LocalDiskSelectionDialog.errorLabel.text=Error Label
|
||||||
|
LocalDiskSelectionDialog.selectLocalDiskLabel.text=Select a local disk:
|
||||||
|
LocalDiskSelectionDialog.cancelButton.text=Cancel
|
||||||
|
LocalDiskSelectionDialog.okButton.text=OK
|
||||||
|
LocalDiskPanel.localDiskLabel.text=Local Disk:
|
||||||
|
LocalDiskPanel.imageWriterErrorLabel.text=Error Label
|
||||||
|
LocalDiskSelectionDialog.title=Select Local Disk
|
||||||
|
@ -22,11 +22,9 @@ AddImageErrorsDialog.closeButton.text=\u9589\u3058\u308b
|
|||||||
OpenRecentCasePanel.openButton.text=\u958b\u304f
|
OpenRecentCasePanel.openButton.text=\u958b\u304f
|
||||||
ImageFilePanel.pathLabel.text=\u30a4\u30e1\u30fc\u30b8\u30d5\u30a1\u30a4\u30eb\u3092\u95b2\u89a7\uff1a
|
ImageFilePanel.pathLabel.text=\u30a4\u30e1\u30fc\u30b8\u30d5\u30a1\u30a4\u30eb\u3092\u95b2\u89a7\uff1a
|
||||||
ImageFilePanel.browseButton.text=\u95b2\u89a7
|
ImageFilePanel.browseButton.text=\u95b2\u89a7
|
||||||
LocalDiskPanel.diskLabel.text=\u30ed\u30fc\u30ab\u30eb\u30c7\u30a3\u30b9\u30af\u3092\u9078\u629e\uff1a
|
|
||||||
MissingImageDialog.selectButton.text=\u30a4\u30e1\u30fc\u30b8\u3092\u9078\u629e
|
MissingImageDialog.selectButton.text=\u30a4\u30e1\u30fc\u30b8\u3092\u9078\u629e
|
||||||
MissingImageDialog.titleLabel.text=\u6b20\u843d\u3057\u305f\u30a4\u30e1\u30fc\u30b8\u306e\u691c\u7d22
|
MissingImageDialog.titleLabel.text=\u6b20\u843d\u3057\u305f\u30a4\u30e1\u30fc\u30b8\u306e\u691c\u7d22
|
||||||
MissingImageDialog.cancelButton.text=\u30ad\u30e3\u30f3\u30bb\u30eb
|
MissingImageDialog.cancelButton.text=\u30ad\u30e3\u30f3\u30bb\u30eb
|
||||||
LocalDiskPanel.errorLabel.text=\u30a8\u30e9\u30fc\u30e9\u30d9\u30eb
|
|
||||||
AddImageWizardAddingProgressVisual.statusLabel.text=\u30ed\u30fc\u30ab\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f\u3002\u30d5\u30a1\u30a4\u30eb\u3092\u89e3\u6790\u4e2d\u3067\u3059\u3002
|
AddImageWizardAddingProgressVisual.statusLabel.text=\u30ed\u30fc\u30ab\u30eb\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306b\u30d5\u30a1\u30a4\u30eb\u30b7\u30b9\u30c6\u30e0\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f\u3002\u30d5\u30a1\u30a4\u30eb\u3092\u89e3\u6790\u4e2d\u3067\u3059\u3002
|
||||||
AddImageWizardAddingProgressVisual.progressLabel.text=\uff1c\u30d7\u30ed\u30b0\u30ec\u30b9\uff1e
|
AddImageWizardAddingProgressVisual.progressLabel.text=\uff1c\u30d7\u30ed\u30b0\u30ec\u30b9\uff1e
|
||||||
AddImageWizardAddingProgressVisual.viewLogButton.text=\u30ed\u30b0\u3092\u8868\u793a
|
AddImageWizardAddingProgressVisual.viewLogButton.text=\u30ed\u30b0\u3092\u8868\u793a
|
||||||
@ -205,3 +203,5 @@ LogicalEvidenceFilePanel.selectButton.text=\u8ffd\u52a0
|
|||||||
LogicalEvidenceFilePanel.errorLabel.text=\u30a8\u30e9\u30fc\u30e9\u30d9\u30eb
|
LogicalEvidenceFilePanel.errorLabel.text=\u30a8\u30e9\u30fc\u30e9\u30d9\u30eb
|
||||||
LogicalEvidenceFilePanel.logicalEvidenceFileChooser.dialogTitle=\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u307e\u305f\u306f\u30d5\u30a9\u30eb\u30c0\u3092\u9078\u629e
|
LogicalEvidenceFilePanel.logicalEvidenceFileChooser.dialogTitle=\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u307e\u305f\u306f\u30d5\u30a9\u30eb\u30c0\u3092\u9078\u629e
|
||||||
LogicalEvidenceFilePanel.logicalEvidenceFileChooser.approveButtonText=\u9078\u629e
|
LogicalEvidenceFilePanel.logicalEvidenceFileChooser.approveButtonText=\u9078\u629e
|
||||||
|
LocalDiskSelectionDialog.errorLabel.text=\u30a8\u30e9\u30fc\u30e9\u30d9\u30eb
|
||||||
|
LocalDiskSelectionDialog.selectLocalDiskLabel.text=\u30ed\u30fc\u30ab\u30eb\u30c7\u30a3\u30b9\u30af\u3092\u9078\u629e\uff1a
|
||||||
|
@ -103,7 +103,7 @@ public class LocalDiskDSProcessor implements DataSourceProcessor, AutoIngestData
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public JPanel getPanel() {
|
public JPanel getPanel() {
|
||||||
configPanel.refreshTable();
|
configPanel.resetLocalDiskSelection();
|
||||||
return configPanel;
|
return configPanel;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,7 +137,7 @@ public class LocalDiskDSProcessor implements DataSourceProcessor, AutoIngestData
|
|||||||
public void run(DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) {
|
public void run(DataSourceProcessorProgressMonitor progressMonitor, DataSourceProcessorCallback callback) {
|
||||||
if (!setDataSourceOptionsCalled) {
|
if (!setDataSourceOptionsCalled) {
|
||||||
deviceId = UUID.randomUUID().toString();
|
deviceId = UUID.randomUUID().toString();
|
||||||
drivePath = configPanel.getContentPaths();
|
drivePath = configPanel.getContentPath();
|
||||||
sectorSize = configPanel.getSectorSize();
|
sectorSize = configPanel.getSectorSize();
|
||||||
timeZone = configPanel.getTimeZone();
|
timeZone = configPanel.getTimeZone();
|
||||||
ignoreFatOrphanFiles = configPanel.getNoFatOrphans();
|
ignoreFatOrphanFiles = configPanel.getNoFatOrphans();
|
||||||
|
@ -26,52 +26,48 @@
|
|||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
<Group type="102" attributes="0">
|
||||||
<Group type="103" groupAlignment="0" attributes="0">
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
<Group type="102" attributes="0">
|
|
||||||
<Component id="diskLabel" min="-2" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Group type="102" alignment="1" attributes="0">
|
|
||||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
|
||||||
<Component id="refreshTableButton" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Component id="jScrollPane1" alignment="1" max="32767" attributes="0"/>
|
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="localDiskLabel" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Component id="localDiskNameTextField" max="32767" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="1" attributes="0">
|
<Component id="selectDiskButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Group type="102" 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="timeZoneLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="timeZoneLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
<Component id="timeZoneComboBox" max="32767" attributes="0"/>
|
<Component id="timeZoneComboBox" min="-2" pref="275" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Component id="noFatOrphansCheckbox" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="copyImageCheckbox" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<EmptySpace min="21" pref="21" max="-2" attributes="0"/>
|
||||||
|
<Component id="pathTextField" min="-2" pref="342" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="browseButton" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Group type="102" alignment="0" attributes="0">
|
||||||
<Group type="103" groupAlignment="1" attributes="0">
|
<EmptySpace min="-2" pref="2" max="-2" attributes="0"/>
|
||||||
<Group type="102" alignment="0" attributes="0">
|
<Component id="sectorSizeLabel" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
|
<Component id="sectorSizeComboBox" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<EmptySpace min="21" pref="21" max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="descLabel" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="changeDatabasePathCheckbox" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Group type="102" attributes="0">
|
||||||
<EmptySpace min="21" pref="21" max="-2" attributes="0"/>
|
<EmptySpace min="21" pref="21" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="1" attributes="0">
|
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="jLabel1" alignment="0" min="-2" max="-2" attributes="0"/>
|
|
||||||
<Component id="changeDatabasePathCheckbox" alignment="0" min="-2" max="-2" attributes="0"/>
|
|
||||||
<Component id="imageWriterErrorLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
|
||||||
<Component id="descLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
</Group>
|
</Group>
|
||||||
<Component id="copyImageCheckbox" alignment="0" min="-2" max="-2" attributes="0"/>
|
<Component id="imageWriterErrorLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="errorLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
|
||||||
<Group type="102" alignment="0" attributes="0">
|
|
||||||
<Component id="sectorSizeLabel" min="-2" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
|
||||||
<Component id="sectorSizeComboBox" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Group type="102" alignment="0" attributes="0">
|
|
||||||
<EmptySpace min="21" pref="21" max="-2" attributes="0"/>
|
|
||||||
<Component id="pathTextField" min="-2" pref="342" max="-2" attributes="0"/>
|
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
|
||||||
<Component id="browseButton" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<Component id="noFatOrphansCheckbox" alignment="0" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
|
<EmptySpace min="0" pref="39" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
@ -81,73 +77,44 @@
|
|||||||
<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="diskLabel" min="-2" max="-2" attributes="0"/>
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
<EmptySpace min="-2" pref="1" max="-2" attributes="0"/>
|
<Component id="localDiskLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="jScrollPane1" min="-2" pref="100" max="-2" attributes="0"/>
|
<Component id="selectDiskButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<Component id="localDiskNameTextField" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="refreshTableButton" min="-2" max="-2" attributes="0"/>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
<Component id="timeZoneLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="timeZoneLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
<Component id="timeZoneComboBox" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="timeZoneComboBox" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||||
<Component id="noFatOrphansCheckbox" min="-2" max="-2" attributes="0"/>
|
<Component id="noFatOrphansCheckbox" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="descLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="descLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace min="-2" pref="10" max="-2" attributes="0"/>
|
<EmptySpace type="separate" max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
|
||||||
<Component id="sectorSizeLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
<Component id="sectorSizeComboBox" alignment="3" min="-2" max="-2" attributes="0"/>
|
|
||||||
</Group>
|
|
||||||
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
|
||||||
<Component id="copyImageCheckbox" min="-2" max="-2" attributes="0"/>
|
<Component id="copyImageCheckbox" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Group type="103" groupAlignment="3" attributes="0">
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
<Component id="pathTextField" alignment="3" min="-2" pref="23" max="-2" attributes="0"/>
|
<Component id="pathTextField" alignment="3" min="-2" pref="23" max="-2" attributes="0"/>
|
||||||
<Component id="browseButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
<Component id="browseButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="13" max="-2" attributes="0"/>
|
||||||
<Component id="changeDatabasePathCheckbox" min="-2" max="-2" attributes="0"/>
|
<Component id="changeDatabasePathCheckbox" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
<Component id="jLabel1" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace type="unrelated" max="-2" attributes="0"/>
|
||||||
<Component id="imageWriterErrorLabel" min="-2" max="-2" attributes="0"/>
|
<Component id="imageWriterErrorLabel" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace min="-2" pref="12" max="-2" attributes="0"/>
|
||||||
<Component id="errorLabel" min="-2" max="-2" attributes="0"/>
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
<EmptySpace pref="43" max="32767" attributes="0"/>
|
<Component id="sectorSizeLabel" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="sectorSizeComboBox" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace pref="127" max="32767" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
</Group>
|
</Group>
|
||||||
</DimensionLayout>
|
</DimensionLayout>
|
||||||
</Layout>
|
</Layout>
|
||||||
<SubComponents>
|
<SubComponents>
|
||||||
<Component class="javax.swing.JLabel" name="diskLabel">
|
|
||||||
<Properties>
|
|
||||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
|
|
||||||
<FontInfo relative="true">
|
|
||||||
<Font bold="false" component="diskLabel" property="font" relativeSize="false" size="11"/>
|
|
||||||
</FontInfo>
|
|
||||||
</Property>
|
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LocalDiskPanel.diskLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JLabel" name="errorLabel">
|
|
||||||
<Properties>
|
|
||||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
|
|
||||||
<FontInfo relative="true">
|
|
||||||
<Font bold="false" component="errorLabel" property="font" relativeSize="false" size="11"/>
|
|
||||||
</FontInfo>
|
|
||||||
</Property>
|
|
||||||
<Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
|
||||||
<Color blue="0" green="0" red="ff" type="rgb"/>
|
|
||||||
</Property>
|
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LocalDiskPanel.errorLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JLabel" name="timeZoneLabel">
|
<Component class="javax.swing.JLabel" name="timeZoneLabel">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
|
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
|
||||||
@ -203,22 +170,6 @@
|
|||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
<Container class="javax.swing.JScrollPane" name="jScrollPane1">
|
|
||||||
|
|
||||||
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
|
||||||
<SubComponents>
|
|
||||||
<Component class="javax.swing.JTable" name="diskTable">
|
|
||||||
<Properties>
|
|
||||||
<Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
|
||||||
<Connection code="model" type="code"/>
|
|
||||||
</Property>
|
|
||||||
<Property name="selectionModel" type="javax.swing.ListSelectionModel" editor="org.netbeans.modules.form.editors2.JTableSelectionModelEditor">
|
|
||||||
<JTableSelectionModel selectionMode="0"/>
|
|
||||||
</Property>
|
|
||||||
</Properties>
|
|
||||||
</Component>
|
|
||||||
</SubComponents>
|
|
||||||
</Container>
|
|
||||||
<Component class="javax.swing.JCheckBox" name="copyImageCheckbox">
|
<Component class="javax.swing.JCheckBox" name="copyImageCheckbox">
|
||||||
<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">
|
||||||
@ -278,16 +229,6 @@
|
|||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
<Component class="javax.swing.JButton" name="refreshTableButton">
|
|
||||||
<Properties>
|
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
|
||||||
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LocalDiskPanel.refreshTableButton.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="refreshTableButtonActionPerformed"/>
|
|
||||||
</Events>
|
|
||||||
</Component>
|
|
||||||
<Component class="javax.swing.JLabel" name="sectorSizeLabel">
|
<Component class="javax.swing.JLabel" name="sectorSizeLabel">
|
||||||
<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">
|
||||||
@ -305,5 +246,27 @@
|
|||||||
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="<String>"/>
|
<AuxValue name="JavaCodeGenerator_TypeParameters" type="java.lang.String" value="<String>"/>
|
||||||
</AuxValues>
|
</AuxValues>
|
||||||
</Component>
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="selectDiskButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LocalDiskPanel.selectDiskButton.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="selectDiskButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="localDiskLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LocalDiskPanel.localDiskLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JTextField" name="localDiskNameTextField">
|
||||||
|
<Properties>
|
||||||
|
<Property name="editable" type="boolean" value="false"/>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
</SubComponents>
|
</SubComponents>
|
||||||
</Form>
|
</Form>
|
||||||
|
@ -20,20 +20,12 @@ package org.sleuthkit.autopsy.casemodule;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.List;
|
|
||||||
import java.util.SimpleTimeZone;
|
import java.util.SimpleTimeZone;
|
||||||
import java.util.TimeZone;
|
import java.util.TimeZone;
|
||||||
import java.util.concurrent.CancellationException;
|
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import javax.swing.JFileChooser;
|
import javax.swing.JFileChooser;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
import javax.swing.SwingWorker;
|
|
||||||
import javax.swing.event.ListSelectionEvent;
|
|
||||||
import javax.swing.event.ListSelectionListener;
|
|
||||||
import javax.swing.event.TableModelListener;
|
|
||||||
import javax.swing.table.TableModel;
|
|
||||||
import org.openide.util.NbBundle;
|
import org.openide.util.NbBundle;
|
||||||
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor;
|
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor;
|
||||||
import org.sleuthkit.autopsy.coreutils.LocalDisk;
|
import org.sleuthkit.autopsy.coreutils.LocalDisk;
|
||||||
@ -42,9 +34,16 @@ import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
|
|||||||
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
|
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
|
||||||
import org.sleuthkit.autopsy.imagewriter.ImageWriterSettings;
|
import org.sleuthkit.autopsy.imagewriter.ImageWriterSettings;
|
||||||
|
|
||||||
@NbBundle.Messages({"LocalDiskPanel.refreshTablebutton.text=Refresh Local Disks",
|
@NbBundle.Messages({
|
||||||
"LocalDiskPanel.listener.getOpenCase.errTitle=No open case available",
|
"LocalDiskPanel.errorMessage.noOpenCaseTitle=No open case available",
|
||||||
"LocalDiskPanel.listener.getOpenCase.errMsg=LocalDiskPanel listener couldn't get the open case."
|
"LocalDiskPanel.errorMessage.noOpenCaseBody=LocalDiskPanel listener couldn't get the open case.",
|
||||||
|
"LocalDiskPanel.imageWriterError.directoryNotExist=Error - directory does not exist",
|
||||||
|
"LocalDiskPanel.imageWriterError.emptyPath=Error - enter path for VHD",
|
||||||
|
"LocalDiskPanel.imageWriterError.isDirectory=Error - VHD path is a directory",
|
||||||
|
"LocalDiskPanel.imageWriterError.fileExists=Error - VHD path already exists",
|
||||||
|
"LocalDiskPanel.moduleErrorMessage.title=Module Error",
|
||||||
|
"LocalDiskPanel.moduleErrorMessage.body=A module caused an error listening to LocalDiskPanel updates. See log to determine which module. Some data could be incomplete.",
|
||||||
|
"LocalDiskPanel.localDiskMessage.unspecified=Unspecified"
|
||||||
})
|
})
|
||||||
/**
|
/**
|
||||||
* ImageTypePanel for adding a local disk or partition such as PhysicalDrive0 or
|
* ImageTypePanel for adding a local disk or partition such as PhysicalDrive0 or
|
||||||
@ -56,55 +55,18 @@ final class LocalDiskPanel extends JPanel {
|
|||||||
private static final String[] SECTOR_SIZE_CHOICES = {"Auto Detect", "512", "1024", "2048", "4096"};
|
private static final String[] SECTOR_SIZE_CHOICES = {"Auto Detect", "512", "1024", "2048", "4096"};
|
||||||
private static LocalDiskPanel instance;
|
private static LocalDiskPanel instance;
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 1L;
|
||||||
private List<LocalDisk> disks;
|
private LocalDisk localDisk;
|
||||||
private boolean enableNext = false;
|
private boolean enableNext = false;
|
||||||
private final LocalDiskModel model;
|
|
||||||
private final JFileChooser fc = new JFileChooser();
|
private final JFileChooser fc = new JFileChooser();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates new form LocalDiskPanel
|
* Creates new form LocalDiskPanel
|
||||||
*/
|
*/
|
||||||
LocalDiskPanel() {
|
LocalDiskPanel() {
|
||||||
this.model = new LocalDiskModel();
|
|
||||||
|
|
||||||
this.disks = new ArrayList<>();
|
|
||||||
initComponents();
|
initComponents();
|
||||||
customInit();
|
customInit();
|
||||||
createTimeZoneList();
|
createTimeZoneList();
|
||||||
createSectorSizeList();
|
createSectorSizeList();
|
||||||
refreshTable();
|
|
||||||
diskTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
|
|
||||||
@Override
|
|
||||||
public void valueChanged(ListSelectionEvent e) {
|
|
||||||
if (diskTable.getSelectedRow() >= 0 && diskTable.getSelectedRow() < disks.size()) {
|
|
||||||
enableNext = true;
|
|
||||||
try {
|
|
||||||
setPotentialImageWriterPath(disks.get(diskTable.getSelectedRow()));
|
|
||||||
firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true);
|
|
||||||
} catch (NoCurrentCaseException ex) {
|
|
||||||
logger.log(Level.SEVERE, "Exception while getting open case.", e); //NON-NLS
|
|
||||||
MessageNotifyUtil.Notify.show(Bundle.LocalDiskPanel_listener_getOpenCase_errTitle(),
|
|
||||||
Bundle.LocalDiskPanel_listener_getOpenCase_errMsg(),
|
|
||||||
MessageNotifyUtil.MessageType.ERROR);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
logger.log(Level.SEVERE, "LocalDiskPanel listener threw exception", e); //NON-NLS
|
|
||||||
MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "LocalDiskPanel.moduleErr"),
|
|
||||||
NbBundle.getMessage(this.getClass(), "LocalDiskPanel.moduleErr.msg"),
|
|
||||||
MessageNotifyUtil.MessageType.ERROR);
|
|
||||||
}
|
|
||||||
} else { //The selection changed to nothing valid being selected, such as with ctrl+click
|
|
||||||
enableNext = false;
|
|
||||||
try {
|
|
||||||
firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true);
|
|
||||||
} catch (Exception ex) {
|
|
||||||
logger.log(Level.SEVERE, "LocalDiskPanel listener threw exception", e); //NON-NLS
|
|
||||||
MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "LocalDiskPanel.moduleErr"),
|
|
||||||
NbBundle.getMessage(this.getClass(), "LocalDiskPanel.moduleErr.msg"),
|
|
||||||
MessageNotifyUtil.MessageType.ERROR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -119,9 +81,6 @@ final class LocalDiskPanel extends JPanel {
|
|||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
private void customInit() {
|
private void customInit() {
|
||||||
errorLabel.setVisible(false);
|
|
||||||
errorLabel.setText("");
|
|
||||||
diskTable.setEnabled(false);
|
|
||||||
imageWriterErrorLabel.setVisible(false);
|
imageWriterErrorLabel.setVisible(false);
|
||||||
imageWriterErrorLabel.setText("");
|
imageWriterErrorLabel.setText("");
|
||||||
if (!PlatformUtil.isWindowsOS()) {
|
if (!PlatformUtil.isWindowsOS()) {
|
||||||
@ -142,34 +101,25 @@ final class LocalDiskPanel extends JPanel {
|
|||||||
// <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() {
|
||||||
|
|
||||||
diskLabel = new javax.swing.JLabel();
|
|
||||||
errorLabel = new javax.swing.JLabel();
|
|
||||||
timeZoneLabel = new javax.swing.JLabel();
|
timeZoneLabel = new javax.swing.JLabel();
|
||||||
timeZoneComboBox = new javax.swing.JComboBox<>();
|
timeZoneComboBox = new javax.swing.JComboBox<>();
|
||||||
noFatOrphansCheckbox = new javax.swing.JCheckBox();
|
noFatOrphansCheckbox = new javax.swing.JCheckBox();
|
||||||
descLabel = new javax.swing.JLabel();
|
descLabel = new javax.swing.JLabel();
|
||||||
jScrollPane1 = new javax.swing.JScrollPane();
|
|
||||||
diskTable = new javax.swing.JTable();
|
|
||||||
copyImageCheckbox = new javax.swing.JCheckBox();
|
copyImageCheckbox = new javax.swing.JCheckBox();
|
||||||
pathTextField = new javax.swing.JTextField();
|
pathTextField = new javax.swing.JTextField();
|
||||||
browseButton = new javax.swing.JButton();
|
browseButton = new javax.swing.JButton();
|
||||||
jLabel1 = new javax.swing.JLabel();
|
jLabel1 = new javax.swing.JLabel();
|
||||||
imageWriterErrorLabel = new javax.swing.JLabel();
|
imageWriterErrorLabel = new javax.swing.JLabel();
|
||||||
changeDatabasePathCheckbox = new javax.swing.JCheckBox();
|
changeDatabasePathCheckbox = new javax.swing.JCheckBox();
|
||||||
refreshTableButton = new javax.swing.JButton();
|
|
||||||
sectorSizeLabel = new javax.swing.JLabel();
|
sectorSizeLabel = new javax.swing.JLabel();
|
||||||
sectorSizeComboBox = new javax.swing.JComboBox<>();
|
sectorSizeComboBox = new javax.swing.JComboBox<>();
|
||||||
|
selectDiskButton = new javax.swing.JButton();
|
||||||
|
localDiskLabel = new javax.swing.JLabel();
|
||||||
|
localDiskNameTextField = new javax.swing.JTextField();
|
||||||
|
|
||||||
setMinimumSize(new java.awt.Dimension(0, 420));
|
setMinimumSize(new java.awt.Dimension(0, 420));
|
||||||
setPreferredSize(new java.awt.Dimension(485, 410));
|
setPreferredSize(new java.awt.Dimension(485, 410));
|
||||||
|
|
||||||
diskLabel.setFont(diskLabel.getFont().deriveFont(diskLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(diskLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.diskLabel.text")); // NOI18N
|
|
||||||
|
|
||||||
errorLabel.setFont(errorLabel.getFont().deriveFont(errorLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
|
||||||
errorLabel.setForeground(new java.awt.Color(255, 0, 0));
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(errorLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.errorLabel.text")); // NOI18N
|
|
||||||
|
|
||||||
timeZoneLabel.setFont(timeZoneLabel.getFont().deriveFont(timeZoneLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
timeZoneLabel.setFont(timeZoneLabel.getFont().deriveFont(timeZoneLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(timeZoneLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.timeZoneLabel.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(timeZoneLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.timeZoneLabel.text")); // NOI18N
|
||||||
|
|
||||||
@ -183,10 +133,6 @@ final class LocalDiskPanel extends JPanel {
|
|||||||
descLabel.setFont(descLabel.getFont().deriveFont(descLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
descLabel.setFont(descLabel.getFont().deriveFont(descLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(descLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.descLabel.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(descLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.descLabel.text")); // NOI18N
|
||||||
|
|
||||||
diskTable.setModel(model);
|
|
||||||
diskTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
|
|
||||||
jScrollPane1.setViewportView(diskTable);
|
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(copyImageCheckbox, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.copyImageCheckbox.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(copyImageCheckbox, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.copyImageCheckbox.text")); // NOI18N
|
||||||
copyImageCheckbox.addActionListener(new java.awt.event.ActionListener() {
|
copyImageCheckbox.addActionListener(new java.awt.event.ActionListener() {
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
@ -216,14 +162,18 @@ final class LocalDiskPanel extends JPanel {
|
|||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(changeDatabasePathCheckbox, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.changeDatabasePathCheckbox.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(changeDatabasePathCheckbox, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.changeDatabasePathCheckbox.text")); // NOI18N
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(refreshTableButton, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.refreshTableButton.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(sectorSizeLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.sectorSizeLabel.text")); // NOI18N
|
||||||
refreshTableButton.addActionListener(new java.awt.event.ActionListener() {
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(selectDiskButton, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.selectDiskButton.text")); // NOI18N
|
||||||
|
selectDiskButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
refreshTableButtonActionPerformed(evt);
|
selectDiskButtonActionPerformed(evt);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
org.openide.awt.Mnemonics.setLocalizedText(sectorSizeLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.sectorSizeLabel.text")); // NOI18N
|
org.openide.awt.Mnemonics.setLocalizedText(localDiskLabel, org.openide.util.NbBundle.getMessage(LocalDiskPanel.class, "LocalDiskPanel.localDiskLabel.text")); // NOI18N
|
||||||
|
|
||||||
|
localDiskNameTextField.setEditable(false);
|
||||||
|
|
||||||
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
|
||||||
this.setLayout(layout);
|
this.setLayout(layout);
|
||||||
@ -232,78 +182,73 @@ final class LocalDiskPanel extends JPanel {
|
|||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addComponent(diskLabel)
|
.addComponent(localDiskLabel)
|
||||||
.addGap(0, 0, Short.MAX_VALUE))
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
|
.addComponent(localDiskNameTextField)
|
||||||
.addGap(0, 0, Short.MAX_VALUE)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(refreshTableButton))
|
.addComponent(selectDiskButton))
|
||||||
.addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING)
|
|
||||||
.addGroup(layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addContainerGap()
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
|
|
||||||
.addComponent(timeZoneLabel)
|
.addComponent(timeZoneLabel)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
.addComponent(timeZoneComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
|
.addComponent(timeZoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 275, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
|
.addComponent(noFatOrphansCheckbox)
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
.addComponent(copyImageCheckbox)
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addGap(21, 21, 21)
|
||||||
|
.addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 342, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(browseButton))
|
||||||
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addGap(2, 2, 2)
|
||||||
|
.addComponent(sectorSizeLabel)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
|
.addComponent(sectorSizeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addGap(21, 21, 21)
|
||||||
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(descLabel)
|
||||||
|
.addComponent(changeDatabasePathCheckbox)
|
||||||
|
.addGroup(layout.createSequentialGroup()
|
||||||
.addGap(21, 21, 21)
|
.addGap(21, 21, 21)
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
|
.addComponent(jLabel1))
|
||||||
.addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING)
|
.addComponent(imageWriterErrorLabel))))
|
||||||
.addComponent(changeDatabasePathCheckbox, javax.swing.GroupLayout.Alignment.LEADING)
|
.addGap(0, 39, Short.MAX_VALUE)))
|
||||||
.addComponent(imageWriterErrorLabel, javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addComponent(descLabel, javax.swing.GroupLayout.Alignment.LEADING)))
|
|
||||||
.addComponent(copyImageCheckbox, javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addComponent(errorLabel, javax.swing.GroupLayout.Alignment.LEADING)
|
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
|
|
||||||
.addComponent(sectorSizeLabel)
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
||||||
.addComponent(sectorSizeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
|
|
||||||
.addGap(21, 21, 21)
|
|
||||||
.addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 342, javax.swing.GroupLayout.PREFERRED_SIZE)
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
||||||
.addComponent(browseButton))
|
|
||||||
.addComponent(noFatOrphansCheckbox, javax.swing.GroupLayout.Alignment.LEADING))
|
|
||||||
.addGap(0, 0, Short.MAX_VALUE)))))
|
|
||||||
.addContainerGap())
|
.addContainerGap())
|
||||||
);
|
);
|
||||||
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(diskLabel)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addGap(1, 1, 1)
|
.addComponent(localDiskLabel)
|
||||||
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(selectDiskButton)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addComponent(localDiskNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
.addComponent(refreshTableButton)
|
.addGap(18, 18, 18)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addComponent(timeZoneLabel)
|
.addComponent(timeZoneLabel)
|
||||||
.addComponent(timeZoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
.addComponent(timeZoneComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addGap(18, 18, 18)
|
||||||
.addComponent(noFatOrphansCheckbox)
|
.addComponent(noFatOrphansCheckbox)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(descLabel)
|
.addComponent(descLabel)
|
||||||
.addGap(10, 10, 10)
|
.addGap(18, 18, 18)
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
|
||||||
.addComponent(sectorSizeLabel)
|
|
||||||
.addComponent(sectorSizeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
|
||||||
.addComponent(copyImageCheckbox)
|
.addComponent(copyImageCheckbox)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addComponent(browseButton))
|
.addComponent(browseButton))
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addGap(13, 13, 13)
|
||||||
.addComponent(changeDatabasePathCheckbox)
|
.addComponent(changeDatabasePathCheckbox)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(jLabel1)
|
.addComponent(jLabel1)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
|
||||||
.addComponent(imageWriterErrorLabel)
|
.addComponent(imageWriterErrorLabel)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addGap(12, 12, 12)
|
||||||
.addComponent(errorLabel)
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
.addContainerGap(43, Short.MAX_VALUE))
|
.addComponent(sectorSizeLabel)
|
||||||
|
.addComponent(sectorSizeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
|
||||||
|
.addContainerGap(127, Short.MAX_VALUE))
|
||||||
);
|
);
|
||||||
}// </editor-fold>//GEN-END:initComponents
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
@ -334,26 +279,46 @@ final class LocalDiskPanel extends JPanel {
|
|||||||
fireUpdateEvent();
|
fireUpdateEvent();
|
||||||
}//GEN-LAST:event_browseButtonActionPerformed
|
}//GEN-LAST:event_browseButtonActionPerformed
|
||||||
|
|
||||||
private void refreshTableButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_refreshTableButtonActionPerformed
|
private void selectDiskButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectDiskButtonActionPerformed
|
||||||
refreshTable();
|
LocalDiskSelectionDialog selectionDialog = new LocalDiskSelectionDialog();
|
||||||
}//GEN-LAST:event_refreshTableButtonActionPerformed
|
selectionDialog.display();
|
||||||
|
LocalDisk selectedLocalDisk = selectionDialog.getLocalDiskSelection();
|
||||||
|
if (selectedLocalDisk != null) {
|
||||||
|
localDisk = selectedLocalDisk;
|
||||||
|
localDiskNameTextField.setText(selectedLocalDisk.getName());
|
||||||
|
|
||||||
|
enableNext = true;
|
||||||
|
try {
|
||||||
|
setPotentialImageWriterPath(localDisk);
|
||||||
|
firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true);
|
||||||
|
} catch (NoCurrentCaseException ex) {
|
||||||
|
logger.log(Level.SEVERE, "Exception while getting open case.", ex); //NON-NLS
|
||||||
|
MessageNotifyUtil.Notify.show(Bundle.LocalDiskPanel_errorMessage_noOpenCaseTitle(),
|
||||||
|
Bundle.LocalDiskPanel_errorMessage_noOpenCaseBody(),
|
||||||
|
MessageNotifyUtil.MessageType.ERROR);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
logger.log(Level.SEVERE, "LocalDiskPanel listener threw exception", ex); //NON-NLS
|
||||||
|
MessageNotifyUtil.Notify.show(Bundle.LocalDiskPanel_moduleErrorMessage_title(),
|
||||||
|
Bundle.LocalDiskPanel_moduleErrorMessage_body(),
|
||||||
|
MessageNotifyUtil.MessageType.ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}//GEN-LAST:event_selectDiskButtonActionPerformed
|
||||||
|
|
||||||
// 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.JCheckBox changeDatabasePathCheckbox;
|
private javax.swing.JCheckBox changeDatabasePathCheckbox;
|
||||||
private javax.swing.JCheckBox copyImageCheckbox;
|
private javax.swing.JCheckBox copyImageCheckbox;
|
||||||
private javax.swing.JLabel descLabel;
|
private javax.swing.JLabel descLabel;
|
||||||
private javax.swing.JLabel diskLabel;
|
|
||||||
private javax.swing.JTable diskTable;
|
|
||||||
private javax.swing.JLabel errorLabel;
|
|
||||||
private javax.swing.JLabel imageWriterErrorLabel;
|
private javax.swing.JLabel imageWriterErrorLabel;
|
||||||
private javax.swing.JLabel jLabel1;
|
private javax.swing.JLabel jLabel1;
|
||||||
private javax.swing.JScrollPane jScrollPane1;
|
private javax.swing.JLabel localDiskLabel;
|
||||||
|
private javax.swing.JTextField localDiskNameTextField;
|
||||||
private javax.swing.JCheckBox noFatOrphansCheckbox;
|
private javax.swing.JCheckBox noFatOrphansCheckbox;
|
||||||
private javax.swing.JTextField pathTextField;
|
private javax.swing.JTextField pathTextField;
|
||||||
private javax.swing.JButton refreshTableButton;
|
|
||||||
private javax.swing.JComboBox<String> sectorSizeComboBox;
|
private javax.swing.JComboBox<String> sectorSizeComboBox;
|
||||||
private javax.swing.JLabel sectorSizeLabel;
|
private javax.swing.JLabel sectorSizeLabel;
|
||||||
|
private javax.swing.JButton selectDiskButton;
|
||||||
private javax.swing.JComboBox<String> timeZoneComboBox;
|
private javax.swing.JComboBox<String> timeZoneComboBox;
|
||||||
private javax.swing.JLabel timeZoneLabel;
|
private javax.swing.JLabel timeZoneLabel;
|
||||||
// End of variables declaration//GEN-END:variables
|
// End of variables declaration//GEN-END:variables
|
||||||
@ -363,22 +328,29 @@ final class LocalDiskPanel extends JPanel {
|
|||||||
firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true);
|
firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.log(Level.SEVERE, "LocalDiskPanel listener threw exception", e); //NON-NLS
|
logger.log(Level.SEVERE, "LocalDiskPanel listener threw exception", e); //NON-NLS
|
||||||
MessageNotifyUtil.Notify.show(NbBundle.getMessage(this.getClass(), "LocalDiskPanel.moduleErr"),
|
MessageNotifyUtil.Notify.show(Bundle.LocalDiskPanel_moduleErrorMessage_title(),
|
||||||
NbBundle.getMessage(this.getClass(), "LocalDiskPanel.moduleErr.msg"),
|
Bundle.LocalDiskPanel_moduleErrorMessage_body(),
|
||||||
MessageNotifyUtil.MessageType.ERROR);
|
MessageNotifyUtil.MessageType.ERROR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reset the local disk selection to "Unspecified".
|
||||||
|
*/
|
||||||
|
void resetLocalDiskSelection() {
|
||||||
|
localDisk = null;
|
||||||
|
localDiskNameTextField.setText(Bundle.LocalDiskPanel_localDiskMessage_unspecified());
|
||||||
|
enableNext = false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the currently selected disk path.
|
* Return the currently selected disk path.
|
||||||
*
|
*
|
||||||
* @return String selected disk path
|
* @return String selected disk path
|
||||||
*/
|
*/
|
||||||
String getContentPaths() {
|
String getContentPath() {
|
||||||
if (disks.size() > 0) {
|
if (localDisk != null) {
|
||||||
int selectedRow = diskTable.getSelectedRow();
|
return localDisk.getPath();
|
||||||
LocalDisk selected = disks.get(selectedRow);
|
|
||||||
return selected.getPath();
|
|
||||||
} else {
|
} else {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
@ -435,7 +407,7 @@ final class LocalDiskPanel extends JPanel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean imageWriterPathIsValid() {
|
private boolean imageWriterPathIsValid() {
|
||||||
if ((!copyImageCheckbox.isSelected()) || !(diskTable.getSelectedRow() >= 0 && diskTable.getSelectedRow() < disks.size())) {
|
if ((!copyImageCheckbox.isSelected()) || localDisk == null) {
|
||||||
imageWriterErrorLabel.setVisible(false);
|
imageWriterErrorLabel.setVisible(false);
|
||||||
imageWriterErrorLabel.setText("");
|
imageWriterErrorLabel.setText("");
|
||||||
return true;
|
return true;
|
||||||
@ -443,7 +415,7 @@ final class LocalDiskPanel extends JPanel {
|
|||||||
|
|
||||||
if (pathTextField.getText().isEmpty()) {
|
if (pathTextField.getText().isEmpty()) {
|
||||||
imageWriterErrorLabel.setVisible(true);
|
imageWriterErrorLabel.setVisible(true);
|
||||||
imageWriterErrorLabel.setText(NbBundle.getMessage(this.getClass(), "LocalDiskPanel.imageWriterEmptyPathError.text"));
|
imageWriterErrorLabel.setText(Bundle.LocalDiskPanel_imageWriterError_emptyPath());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -451,17 +423,17 @@ final class LocalDiskPanel extends JPanel {
|
|||||||
if (((f.getParentFile() != null) && (!f.getParentFile().exists()))
|
if (((f.getParentFile() != null) && (!f.getParentFile().exists()))
|
||||||
|| (f.getParentFile() == null)) {
|
|| (f.getParentFile() == null)) {
|
||||||
imageWriterErrorLabel.setVisible(true);
|
imageWriterErrorLabel.setVisible(true);
|
||||||
imageWriterErrorLabel.setText(NbBundle.getMessage(this.getClass(), "LocalDiskPanel.imageWriterDirError.text"));
|
imageWriterErrorLabel.setText(Bundle.LocalDiskPanel_imageWriterError_directoryNotExist());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (f.isDirectory()) {
|
if (f.isDirectory()) {
|
||||||
imageWriterErrorLabel.setVisible(true);
|
imageWriterErrorLabel.setVisible(true);
|
||||||
imageWriterErrorLabel.setText(NbBundle.getMessage(this.getClass(), "LocalDiskPanel.imageWriterIsDirError.text"));
|
imageWriterErrorLabel.setText(Bundle.LocalDiskPanel_imageWriterError_isDirectory());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (f.exists()) {
|
if (f.exists()) {
|
||||||
imageWriterErrorLabel.setVisible(true);
|
imageWriterErrorLabel.setVisible(true);
|
||||||
imageWriterErrorLabel.setText(NbBundle.getMessage(this.getClass(), "LocalDiskPanel.imageWriterFileExistsError.text"));
|
imageWriterErrorLabel.setText(Bundle.LocalDiskPanel_imageWriterError_fileExists());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
imageWriterErrorLabel.setVisible(false);
|
imageWriterErrorLabel.setVisible(false);
|
||||||
@ -490,13 +462,6 @@ final class LocalDiskPanel extends JPanel {
|
|||||||
return enableNext;
|
return enableNext;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Refreshes the list of disks in the table.
|
|
||||||
*/
|
|
||||||
public void refreshTable() {
|
|
||||||
model.loadDisks();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the drop down list for the time zones and defaults the selection
|
* Creates the drop down list for the time zones and defaults the selection
|
||||||
* to the local machine time zone.
|
* to the local machine time zone.
|
||||||
@ -544,189 +509,4 @@ final class LocalDiskPanel extends JPanel {
|
|||||||
}
|
}
|
||||||
sectorSizeComboBox.setSelectedIndex(0);
|
sectorSizeComboBox.setSelectedIndex(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Table model for displaing information from LocalDisk Objects in a table.
|
|
||||||
*/
|
|
||||||
private class LocalDiskModel implements TableModel {
|
|
||||||
|
|
||||||
private LocalDiskThread worker = null;
|
|
||||||
private boolean ready = false;
|
|
||||||
private volatile boolean loadingDisks = false;
|
|
||||||
|
|
||||||
//private String SELECT = "Select a local disk:";
|
|
||||||
private final String LOADING = NbBundle.getMessage(this.getClass(), "LocalDiskPanel.localDiskModel.loading.msg");
|
|
||||||
private final String NO_DRIVES = NbBundle.getMessage(this.getClass(), "LocalDiskPanel.localDiskModel.nodrives.msg");
|
|
||||||
|
|
||||||
private void loadDisks() {
|
|
||||||
|
|
||||||
// if there is a worker already building the lists, then cancel it first.
|
|
||||||
if (loadingDisks && worker != null) {
|
|
||||||
worker.cancel(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clear the lists
|
|
||||||
errorLabel.setText("");
|
|
||||||
diskTable.setEnabled(false);
|
|
||||||
ready = false;
|
|
||||||
enableNext = false;
|
|
||||||
loadingDisks = true;
|
|
||||||
worker = new LocalDiskThread();
|
|
||||||
worker.execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getRowCount() {
|
|
||||||
if (disks.isEmpty()) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return disks.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getColumnCount() {
|
|
||||||
return 2;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@NbBundle.Messages({"LocalDiskPanel.diskTable.column1.title=Disk Name",
|
|
||||||
"LocalDiskPanel.diskTable.column2.title=Disk Size"
|
|
||||||
})
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getColumnName(int columnIndex) {
|
|
||||||
switch (columnIndex) {
|
|
||||||
case 0:
|
|
||||||
return NbBundle.getMessage(this.getClass(), "LocalDiskPanel.diskTable.column1.title");
|
|
||||||
case 1:
|
|
||||||
return NbBundle.getMessage(this.getClass(), "LocalDiskPanel.diskTable.column2.title");
|
|
||||||
default:
|
|
||||||
return "Unnamed"; //NON-NLS
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Class<?> getColumnClass(int columnIndex) {
|
|
||||||
return String.class;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isCellEditable(int rowIndex, int columnIndex) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object getValueAt(int rowIndex, int columnIndex) {
|
|
||||||
if (ready) {
|
|
||||||
if (disks.isEmpty()) {
|
|
||||||
return NO_DRIVES;
|
|
||||||
}
|
|
||||||
switch (columnIndex) {
|
|
||||||
case 0:
|
|
||||||
return disks.get(rowIndex).getName();
|
|
||||||
case 1:
|
|
||||||
return disks.get(rowIndex).getReadableSize();
|
|
||||||
default:
|
|
||||||
return disks.get(rowIndex).getPath();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return LOADING;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
|
|
||||||
//setter does nothing they should not be able to modify table
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addTableModelListener(TableModelListener l) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeTableModelListener(TableModelListener l) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the lists of physical drives and partitions and combines them
|
|
||||||
* into a list of disks.
|
|
||||||
*/
|
|
||||||
class LocalDiskThread extends SwingWorker<Object, Void> {
|
|
||||||
|
|
||||||
private final Logger logger = Logger.getLogger(LocalDiskThread.class.getName());
|
|
||||||
private List<LocalDisk> physicalDrives = new ArrayList<>();
|
|
||||||
private List<LocalDisk> partitions = new ArrayList<>();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected Object doInBackground() throws Exception {
|
|
||||||
// Populate the lists
|
|
||||||
physicalDrives = new ArrayList<>();
|
|
||||||
partitions = new ArrayList<>();
|
|
||||||
physicalDrives = PlatformUtil.getPhysicalDrives();
|
|
||||||
partitions = PlatformUtil.getPartitions();
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Display any error messages that might of occurred when getting
|
|
||||||
* the lists of physical drives or partitions.
|
|
||||||
*/
|
|
||||||
private void displayErrors() {
|
|
||||||
if (physicalDrives.isEmpty() && partitions.isEmpty()) {
|
|
||||||
if (PlatformUtil.isWindowsOS()) {
|
|
||||||
errorLabel.setText(
|
|
||||||
NbBundle.getMessage(this.getClass(), "LocalDiskPanel.errLabel.disksNotDetected.text"));
|
|
||||||
errorLabel.setToolTipText(NbBundle.getMessage(this.getClass(),
|
|
||||||
"LocalDiskPanel.errLabel.disksNotDetected.toolTipText"));
|
|
||||||
} else {
|
|
||||||
errorLabel.setText(
|
|
||||||
NbBundle.getMessage(this.getClass(), "LocalDiskPanel.errLabel.drivesNotDetected.text"));
|
|
||||||
errorLabel.setToolTipText(NbBundle.getMessage(this.getClass(),
|
|
||||||
"LocalDiskPanel.errLabel.drivesNotDetected.toolTipText"));
|
|
||||||
}
|
|
||||||
errorLabel.setVisible(true);
|
|
||||||
diskTable.setEnabled(false);
|
|
||||||
} else if (physicalDrives.isEmpty()) {
|
|
||||||
errorLabel.setText(
|
|
||||||
NbBundle.getMessage(this.getClass(), "LocalDiskPanel.errLabel.someDisksNotDetected.text"));
|
|
||||||
errorLabel.setToolTipText(NbBundle.getMessage(this.getClass(),
|
|
||||||
"LocalDiskPanel.errLabel.someDisksNotDetected.toolTipText"));
|
|
||||||
errorLabel.setVisible(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void done() {
|
|
||||||
try {
|
|
||||||
super.get(); //block and get all exceptions thrown while doInBackground()
|
|
||||||
} catch (CancellationException ex) {
|
|
||||||
logger.log(Level.INFO, "Loading local disks was canceled."); //NON-NLS
|
|
||||||
} catch (InterruptedException ex) {
|
|
||||||
logger.log(Level.INFO, "Loading local disks was interrupted."); //NON-NLS
|
|
||||||
} catch (Exception ex) {
|
|
||||||
logger.log(Level.SEVERE, "Fatal error when loading local disks", ex); //NON-NLS
|
|
||||||
} finally {
|
|
||||||
if (!this.isCancelled()) {
|
|
||||||
enableNext = false;
|
|
||||||
displayErrors();
|
|
||||||
worker = null;
|
|
||||||
loadingDisks = false;
|
|
||||||
disks = new ArrayList<>();
|
|
||||||
disks.addAll(physicalDrives);
|
|
||||||
disks.addAll(partitions);
|
|
||||||
if (disks.size() > 0) {
|
|
||||||
diskTable.setEnabled(true);
|
|
||||||
diskTable.clearSelection();
|
|
||||||
}
|
|
||||||
pathTextField.setText("");
|
|
||||||
fireUpdateEvent();
|
|
||||||
ready = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
diskTable.revalidate();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
150
Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskSelectionDialog.form
Executable file
150
Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskSelectionDialog.form
Executable file
@ -0,0 +1,150 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
|
||||||
|
<Form version="1.6" maxVersion="1.8" type="org.netbeans.modules.form.forminfo.JDialogFormInfo">
|
||||||
|
<Properties>
|
||||||
|
<Property name="defaultCloseOperation" type="int" value="2"/>
|
||||||
|
<Property name="title" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LocalDiskSelectionDialog.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="alwaysOnTop" type="boolean" value="true"/>
|
||||||
|
<Property name="resizable" type="boolean" value="false"/>
|
||||||
|
</Properties>
|
||||||
|
<SyntheticProperties>
|
||||||
|
<SyntheticProperty name="formSizePolicy" type="int" value="1"/>
|
||||||
|
<SyntheticProperty name="generateCenter" type="boolean" value="false"/>
|
||||||
|
</SyntheticProperties>
|
||||||
|
<AuxValues>
|
||||||
|
<AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/>
|
||||||
|
<AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/>
|
||||||
|
<AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/>
|
||||||
|
<AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/>
|
||||||
|
<AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/>
|
||||||
|
<AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/>
|
||||||
|
<AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/>
|
||||||
|
<AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/>
|
||||||
|
</AuxValues>
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
<DimensionLayout dim="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="localDiskScrollPane" pref="560" max="32767" attributes="0"/>
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<Component id="okButton" min="-2" pref="90" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="cancelButton" min="-2" pref="90" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="32767" attributes="0"/>
|
||||||
|
<Component id="refreshLocalDisksButton" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<Group type="102" attributes="0">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Component id="selectLocalDiskLabel" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="errorLabel" alignment="0" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace min="0" pref="0" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
<DimensionLayout dim="1">
|
||||||
|
<Group type="103" groupAlignment="0" attributes="0">
|
||||||
|
<Group type="102" alignment="0" attributes="0">
|
||||||
|
<EmptySpace min="-2" pref="6" max="-2" attributes="0"/>
|
||||||
|
<Component id="selectLocalDiskLabel" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace min="-2" pref="4" max="-2" attributes="0"/>
|
||||||
|
<Component id="localDiskScrollPane" min="-2" pref="100" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Group type="103" groupAlignment="3" attributes="0">
|
||||||
|
<Component id="refreshLocalDisksButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="okButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
<Component id="cancelButton" alignment="3" min="-2" max="-2" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
|
<Component id="errorLabel" min="-2" max="-2" attributes="0"/>
|
||||||
|
<EmptySpace pref="27" max="32767" attributes="0"/>
|
||||||
|
</Group>
|
||||||
|
</Group>
|
||||||
|
</DimensionLayout>
|
||||||
|
</Layout>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JLabel" name="selectLocalDiskLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
|
||||||
|
<FontInfo relative="true">
|
||||||
|
<Font bold="false" component="selectLocalDiskLabel" property="font" relativeSize="false" size="11"/>
|
||||||
|
</FontInfo>
|
||||||
|
</Property>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LocalDiskSelectionDialog.selectLocalDiskLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JLabel" name="errorLabel">
|
||||||
|
<Properties>
|
||||||
|
<Property name="font" type="java.awt.Font" editor="org.netbeans.modules.form.editors2.FontEditor">
|
||||||
|
<FontInfo relative="true">
|
||||||
|
<Font bold="false" component="errorLabel" property="font" relativeSize="false" size="11"/>
|
||||||
|
</FontInfo>
|
||||||
|
</Property>
|
||||||
|
<Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor">
|
||||||
|
<Color blue="0" green="0" red="ff" type="rgb"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LocalDiskSelectionDialog.errorLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
<Container class="javax.swing.JScrollPane" name="localDiskScrollPane">
|
||||||
|
|
||||||
|
<Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/>
|
||||||
|
<SubComponents>
|
||||||
|
<Component class="javax.swing.JTable" name="localDiskTable">
|
||||||
|
<Properties>
|
||||||
|
<Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor">
|
||||||
|
<Connection code="model" type="code"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="selectionModel" type="javax.swing.ListSelectionModel" editor="org.netbeans.modules.form.editors2.JTableSelectionModelEditor">
|
||||||
|
<JTableSelectionModel selectionMode="0"/>
|
||||||
|
</Property>
|
||||||
|
</Properties>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Container>
|
||||||
|
<Component class="javax.swing.JButton" name="refreshLocalDisksButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LocalDiskSelectionDialog.refreshLocalDisksButton.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="refreshLocalDisksButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="okButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LocalDiskSelectionDialog.okButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/>
|
||||||
|
</Property>
|
||||||
|
<Property name="enabled" type="boolean" value="false"/>
|
||||||
|
</Properties>
|
||||||
|
<Events>
|
||||||
|
<EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="okButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
<Component class="javax.swing.JButton" name="cancelButton">
|
||||||
|
<Properties>
|
||||||
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
|
<ResourceString bundle="org/sleuthkit/autopsy/casemodule/Bundle.properties" key="LocalDiskSelectionDialog.cancelButton.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="cancelButtonActionPerformed"/>
|
||||||
|
</Events>
|
||||||
|
</Component>
|
||||||
|
</SubComponents>
|
||||||
|
</Form>
|
434
Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskSelectionDialog.java
Executable file
434
Core/src/org/sleuthkit/autopsy/casemodule/LocalDiskSelectionDialog.java
Executable file
@ -0,0 +1,434 @@
|
|||||||
|
/*
|
||||||
|
* Autopsy Forensic Browser
|
||||||
|
*
|
||||||
|
* Copyright 2018 Basis Technology Corp.
|
||||||
|
* Contact: carrier <at> sleuthkit <dot> org
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.sleuthkit.autopsy.casemodule;
|
||||||
|
|
||||||
|
import java.awt.Window;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.CancellationException;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import javax.swing.JDialog;
|
||||||
|
import javax.swing.SwingWorker;
|
||||||
|
import javax.swing.event.ListSelectionEvent;
|
||||||
|
import javax.swing.event.ListSelectionListener;
|
||||||
|
import javax.swing.event.TableModelListener;
|
||||||
|
import javax.swing.table.TableModel;
|
||||||
|
import org.openide.util.NbBundle;
|
||||||
|
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.LocalDisk;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.Logger;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.MessageNotifyUtil;
|
||||||
|
import org.sleuthkit.autopsy.coreutils.PlatformUtil;
|
||||||
|
|
||||||
|
@NbBundle.Messages({
|
||||||
|
"LocalDiskSelectionDialog.moduleErrorMessage.title=Module Error",
|
||||||
|
"LocalDiskSelectionDialog.moduleErrorMessage.body=A module caused an error listening to LocalDiskPanel updates. See log to determine which module. Some data could be incomplete.",
|
||||||
|
"LocalDiskSelectionDialog.errorMessage.disksNotDetected=Disks were not detected. On some systems it requires admin privileges (or \"Run as administrator\").",
|
||||||
|
"LocalDiskSelectionDialog.errorMessage.drivesNotDetected=Local drives were not detected. Auto-detection not supported on this OS or admin privileges required",
|
||||||
|
"LocalDiskSelectionDialog.errorMessage.someDisksNotDetected=Some disks were not detected. On some systems it requires admin privileges (or \"Run as administrator\")."
|
||||||
|
})
|
||||||
|
/**
|
||||||
|
* Local disk selection dialog for loading a disk into the LocalDiskPanel.
|
||||||
|
*/
|
||||||
|
final class LocalDiskSelectionDialog extends JDialog {
|
||||||
|
|
||||||
|
private static final Logger logger = Logger.getLogger(LocalDiskSelectionDialog.class.getName());
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
private List<LocalDisk> disks;
|
||||||
|
private final LocalDiskModel model;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new LocalDiskSelectionDialog instance.
|
||||||
|
*/
|
||||||
|
LocalDiskSelectionDialog() {
|
||||||
|
super((Window) LocalDiskPanel.getDefault().getTopLevelAncestor(), ModalityType.MODELESS);
|
||||||
|
|
||||||
|
this.model = new LocalDiskModel();
|
||||||
|
this.disks = new ArrayList<>();
|
||||||
|
|
||||||
|
initComponents();
|
||||||
|
refreshTable();
|
||||||
|
|
||||||
|
localDiskTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
|
||||||
|
@Override
|
||||||
|
public void valueChanged(ListSelectionEvent e) {
|
||||||
|
int selectedRow = localDiskTable.getSelectedRow();
|
||||||
|
okButton.setEnabled(selectedRow >= 0 && selectedRow < disks.size());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display the dialog.
|
||||||
|
*/
|
||||||
|
void display() {
|
||||||
|
setModal(true);
|
||||||
|
setSize(getPreferredSize());
|
||||||
|
setLocationRelativeTo(this.getParent());
|
||||||
|
setAlwaysOnTop(false);
|
||||||
|
setVisible(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is called from within the constructor to initialize the form.
|
||||||
|
* WARNING: Do NOT modify this code. The content of this method is always
|
||||||
|
* regenerated by the Form Editor.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
|
||||||
|
private void initComponents() {
|
||||||
|
|
||||||
|
selectLocalDiskLabel = new javax.swing.JLabel();
|
||||||
|
errorLabel = new javax.swing.JLabel();
|
||||||
|
localDiskScrollPane = new javax.swing.JScrollPane();
|
||||||
|
localDiskTable = new javax.swing.JTable();
|
||||||
|
refreshLocalDisksButton = new javax.swing.JButton();
|
||||||
|
okButton = new javax.swing.JButton();
|
||||||
|
cancelButton = new javax.swing.JButton();
|
||||||
|
|
||||||
|
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
|
||||||
|
setTitle(org.openide.util.NbBundle.getMessage(LocalDiskSelectionDialog.class, "LocalDiskSelectionDialog.title")); // NOI18N
|
||||||
|
setAlwaysOnTop(true);
|
||||||
|
setResizable(false);
|
||||||
|
|
||||||
|
selectLocalDiskLabel.setFont(selectLocalDiskLabel.getFont().deriveFont(selectLocalDiskLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(selectLocalDiskLabel, org.openide.util.NbBundle.getMessage(LocalDiskSelectionDialog.class, "LocalDiskSelectionDialog.selectLocalDiskLabel.text")); // NOI18N
|
||||||
|
|
||||||
|
errorLabel.setFont(errorLabel.getFont().deriveFont(errorLabel.getFont().getStyle() & ~java.awt.Font.BOLD, 11));
|
||||||
|
errorLabel.setForeground(new java.awt.Color(255, 0, 0));
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(errorLabel, org.openide.util.NbBundle.getMessage(LocalDiskSelectionDialog.class, "LocalDiskSelectionDialog.errorLabel.text")); // NOI18N
|
||||||
|
|
||||||
|
localDiskTable.setModel(model);
|
||||||
|
localDiskTable.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
|
||||||
|
localDiskScrollPane.setViewportView(localDiskTable);
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(refreshLocalDisksButton, org.openide.util.NbBundle.getMessage(LocalDiskSelectionDialog.class, "LocalDiskSelectionDialog.refreshLocalDisksButton.text")); // NOI18N
|
||||||
|
refreshLocalDisksButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
refreshLocalDisksButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(okButton, org.openide.util.NbBundle.getMessage(LocalDiskSelectionDialog.class, "LocalDiskSelectionDialog.okButton.text")); // NOI18N
|
||||||
|
okButton.setEnabled(false);
|
||||||
|
okButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
okButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
org.openide.awt.Mnemonics.setLocalizedText(cancelButton, org.openide.util.NbBundle.getMessage(LocalDiskSelectionDialog.class, "LocalDiskSelectionDialog.cancelButton.text")); // NOI18N
|
||||||
|
cancelButton.addActionListener(new java.awt.event.ActionListener() {
|
||||||
|
public void actionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
cancelButtonActionPerformed(evt);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
|
||||||
|
getContentPane().setLayout(layout);
|
||||||
|
layout.setHorizontalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addContainerGap()
|
||||||
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(localDiskScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 560, Short.MAX_VALUE)
|
||||||
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addComponent(okButton, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(cancelButton, javax.swing.GroupLayout.PREFERRED_SIZE, 90, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
|
||||||
|
.addComponent(refreshLocalDisksButton))
|
||||||
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addComponent(selectLocalDiskLabel)
|
||||||
|
.addComponent(errorLabel))
|
||||||
|
.addGap(0, 0, Short.MAX_VALUE)))
|
||||||
|
.addContainerGap())
|
||||||
|
);
|
||||||
|
layout.setVerticalGroup(
|
||||||
|
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
|
||||||
|
.addGroup(layout.createSequentialGroup()
|
||||||
|
.addGap(6, 6, 6)
|
||||||
|
.addComponent(selectLocalDiskLabel)
|
||||||
|
.addGap(4, 4, 4)
|
||||||
|
.addComponent(localDiskScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
|
||||||
|
.addComponent(refreshLocalDisksButton)
|
||||||
|
.addComponent(okButton)
|
||||||
|
.addComponent(cancelButton))
|
||||||
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
|
.addComponent(errorLabel)
|
||||||
|
.addContainerGap(27, Short.MAX_VALUE))
|
||||||
|
);
|
||||||
|
|
||||||
|
pack();
|
||||||
|
}// </editor-fold>//GEN-END:initComponents
|
||||||
|
|
||||||
|
private void refreshLocalDisksButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_refreshLocalDisksButtonActionPerformed
|
||||||
|
refreshTable();
|
||||||
|
}//GEN-LAST:event_refreshLocalDisksButtonActionPerformed
|
||||||
|
|
||||||
|
private void okButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_okButtonActionPerformed
|
||||||
|
dispose();
|
||||||
|
}//GEN-LAST:event_okButtonActionPerformed
|
||||||
|
|
||||||
|
private void cancelButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cancelButtonActionPerformed
|
||||||
|
localDiskTable.clearSelection();
|
||||||
|
dispose();
|
||||||
|
}//GEN-LAST:event_cancelButtonActionPerformed
|
||||||
|
|
||||||
|
// Variables declaration - do not modify//GEN-BEGIN:variables
|
||||||
|
private javax.swing.JButton cancelButton;
|
||||||
|
private javax.swing.JLabel errorLabel;
|
||||||
|
private javax.swing.JScrollPane localDiskScrollPane;
|
||||||
|
private javax.swing.JTable localDiskTable;
|
||||||
|
private javax.swing.JButton okButton;
|
||||||
|
private javax.swing.JButton refreshLocalDisksButton;
|
||||||
|
private javax.swing.JLabel selectLocalDiskLabel;
|
||||||
|
// End of variables declaration//GEN-END:variables
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fire a property change event to update the UI.
|
||||||
|
*/
|
||||||
|
private void fireUpdateEvent() {
|
||||||
|
try {
|
||||||
|
firePropertyChange(DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), false, true);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.log(Level.SEVERE, "LocalDiskSelectionDialog listener threw exception", e); //NON-NLS
|
||||||
|
MessageNotifyUtil.Notify.show(Bundle.LocalDiskSelectionDialog_moduleErrorMessage_title(),
|
||||||
|
Bundle.LocalDiskSelectionDialog_moduleErrorMessage_body(),
|
||||||
|
MessageNotifyUtil.MessageType.ERROR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the currently selected disk path.
|
||||||
|
*
|
||||||
|
* @return String selected disk path
|
||||||
|
*/
|
||||||
|
String getContentPaths() {
|
||||||
|
LocalDisk selected = getLocalDiskSelection();
|
||||||
|
if (selected != null) {
|
||||||
|
return selected.getPath();
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Refreshes the list of disks in the table.
|
||||||
|
*/
|
||||||
|
private void refreshTable() {
|
||||||
|
model.loadDisks();
|
||||||
|
localDiskTable.clearSelection();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the local disk selected from the table.
|
||||||
|
*
|
||||||
|
* @return The LocalDisk object associated with the selection in the table.
|
||||||
|
*/
|
||||||
|
LocalDisk getLocalDiskSelection() {
|
||||||
|
if (disks.size() > 0) {
|
||||||
|
int selectedRow = localDiskTable.getSelectedRow();
|
||||||
|
if (selectedRow >= 0 && selectedRow < disks.size()) {
|
||||||
|
return disks.get(selectedRow);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NbBundle.Messages({
|
||||||
|
"LocalDiskSelectionDialog.tableMessage.loading=Loading local disks...",
|
||||||
|
"LocalDiskSelectionDialog.tableMessage.noDrives=No Accessible Drives",
|
||||||
|
})
|
||||||
|
/**
|
||||||
|
* Table model for displaing information from LocalDisk Objects in a table.
|
||||||
|
*/
|
||||||
|
private class LocalDiskModel implements TableModel {
|
||||||
|
|
||||||
|
private LocalDiskThread worker = null;
|
||||||
|
private boolean ready = false;
|
||||||
|
private volatile boolean loadingDisks = false;
|
||||||
|
|
||||||
|
private void loadDisks() {
|
||||||
|
|
||||||
|
// if there is a worker already building the lists, then cancel it first.
|
||||||
|
if (loadingDisks && worker != null) {
|
||||||
|
worker.cancel(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear the lists
|
||||||
|
errorLabel.setText("");
|
||||||
|
localDiskTable.setEnabled(false);
|
||||||
|
ready = false;
|
||||||
|
loadingDisks = true;
|
||||||
|
worker = new LocalDiskThread();
|
||||||
|
worker.execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getRowCount() {
|
||||||
|
if (disks.isEmpty()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return disks.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getColumnCount() {
|
||||||
|
return 2;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@NbBundle.Messages({
|
||||||
|
"LocalDiskSelectionDialog.columnName.diskName=Disk Name",
|
||||||
|
"LocalDiskSelectionDialog.columnName.diskSize=Disk Size"
|
||||||
|
})
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getColumnName(int columnIndex) {
|
||||||
|
switch (columnIndex) {
|
||||||
|
case 0:
|
||||||
|
return Bundle.LocalDiskSelectionDialog_columnName_diskName();
|
||||||
|
case 1:
|
||||||
|
return Bundle.LocalDiskSelectionDialog_columnName_diskSize();
|
||||||
|
default:
|
||||||
|
return "Unnamed"; //NON-NLS
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<?> getColumnClass(int columnIndex) {
|
||||||
|
return String.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCellEditable(int rowIndex, int columnIndex) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getValueAt(int rowIndex, int columnIndex) {
|
||||||
|
if (ready) {
|
||||||
|
if (disks.isEmpty()) {
|
||||||
|
return Bundle.LocalDiskSelectionDialog_tableMessage_noDrives();
|
||||||
|
}
|
||||||
|
switch (columnIndex) {
|
||||||
|
case 0:
|
||||||
|
return disks.get(rowIndex).getName();
|
||||||
|
case 1:
|
||||||
|
return disks.get(rowIndex).getReadableSize();
|
||||||
|
default:
|
||||||
|
return disks.get(rowIndex).getPath();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return Bundle.LocalDiskSelectionDialog_tableMessage_loading();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
|
||||||
|
//setter does nothing they should not be able to modify table
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addTableModelListener(TableModelListener l) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeTableModelListener(TableModelListener l) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the lists of physical drives and partitions and combines them
|
||||||
|
* into a list of disks.
|
||||||
|
*/
|
||||||
|
class LocalDiskThread extends SwingWorker<Object, Void> {
|
||||||
|
|
||||||
|
private final Logger logger = Logger.getLogger(LocalDiskThread.class.getName());
|
||||||
|
private List<LocalDisk> physicalDrives = new ArrayList<>();
|
||||||
|
private List<LocalDisk> partitions = new ArrayList<>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Object doInBackground() throws Exception {
|
||||||
|
// Populate the lists
|
||||||
|
physicalDrives = new ArrayList<>();
|
||||||
|
partitions = new ArrayList<>();
|
||||||
|
physicalDrives = PlatformUtil.getPhysicalDrives();
|
||||||
|
partitions = PlatformUtil.getPartitions();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display any error messages that might of occurred when getting
|
||||||
|
* the lists of physical drives or partitions.
|
||||||
|
*/
|
||||||
|
private void displayErrors() {
|
||||||
|
if (physicalDrives.isEmpty() && partitions.isEmpty()) {
|
||||||
|
if (PlatformUtil.isWindowsOS()) {
|
||||||
|
errorLabel.setText(Bundle.LocalDiskSelectionDialog_errorMessage_disksNotDetected());
|
||||||
|
errorLabel.setToolTipText(Bundle.LocalDiskSelectionDialog_errorMessage_disksNotDetected());
|
||||||
|
} else {
|
||||||
|
errorLabel.setText(Bundle.LocalDiskSelectionDialog_errorMessage_drivesNotDetected());
|
||||||
|
errorLabel.setToolTipText(Bundle.LocalDiskSelectionDialog_errorMessage_drivesNotDetected());
|
||||||
|
}
|
||||||
|
errorLabel.setVisible(true);
|
||||||
|
localDiskTable.setEnabled(false);
|
||||||
|
} else if (physicalDrives.isEmpty()) {
|
||||||
|
errorLabel.setText(Bundle.LocalDiskSelectionDialog_errorMessage_someDisksNotDetected());
|
||||||
|
errorLabel.setToolTipText(Bundle.LocalDiskSelectionDialog_errorMessage_someDisksNotDetected());
|
||||||
|
errorLabel.setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void done() {
|
||||||
|
try {
|
||||||
|
super.get(); //block and get all exceptions thrown while doInBackground()
|
||||||
|
} catch (CancellationException ex) {
|
||||||
|
logger.log(Level.INFO, "Loading local disks was canceled."); //NON-NLS
|
||||||
|
} catch (InterruptedException ex) {
|
||||||
|
logger.log(Level.INFO, "Loading local disks was interrupted."); //NON-NLS
|
||||||
|
} catch (ExecutionException ex) {
|
||||||
|
logger.log(Level.SEVERE, "Fatal error when loading local disks", ex); //NON-NLS
|
||||||
|
} finally {
|
||||||
|
if (!this.isCancelled()) {
|
||||||
|
displayErrors();
|
||||||
|
worker = null;
|
||||||
|
loadingDisks = false;
|
||||||
|
disks = new ArrayList<>();
|
||||||
|
disks.addAll(physicalDrives);
|
||||||
|
disks.addAll(partitions);
|
||||||
|
if (disks.size() > 0) {
|
||||||
|
localDiskTable.setEnabled(true);
|
||||||
|
localDiskTable.clearSelection();
|
||||||
|
}
|
||||||
|
fireUpdateEvent();
|
||||||
|
ready = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
localDiskTable.revalidate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user