Fix inaccurate case operation progress messages

This commit is contained in:
Richard Cordovano 2017-03-22 17:20:13 -04:00
parent e20460773a
commit dfe7d074b0

View File

@ -449,21 +449,19 @@ public class Case {
* IMPORTANT: This method should not be called in the event dispatch thread * IMPORTANT: This method should not be called in the event dispatch thread
* (EDT). * (EDT).
* *
* @param caseDir The full path of the case directory. The directory * @param caseDir The full path of the case directory. The directory will be
* will be created if it doesn't already exist; if it * created if it doesn't already exist; if it exists, it is ASSUMED it was
* exists, it is ASSUMED it was created by calling * created by calling createCaseDirectory.
* createCaseDirectory.
* @param caseDisplayName The display name of case, which may be changed * @param caseDisplayName The display name of case, which may be changed
* later by the user. * later by the user.
* @param caseNumber The case number, can be the empty string. * @param caseNumber The case number, can be the empty string.
* @param examiner The examiner to associate with the case, can be * @param examiner The examiner to associate with the case, can be the empty
* the empty string. * string.
* @param caseType The type of case (single-user or multi-user). * @param caseType The type of case (single-user or multi-user).
* *
* @throws CaseActionException if there is a problem creating the case. The * @throws CaseActionException if there is a problem creating the case. The
* exception will have a user-friendly message * exception will have a user-friendly message and may be a wrapper for a
* and may be a wrapper for a lower-level * lower-level exception.
* exception.
*/ */
@Messages({ @Messages({
"# {0} - exception message", "Case.exceptionMessage.wrapperMessage={0}" "# {0} - exception message", "Case.exceptionMessage.wrapperMessage={0}"
@ -503,9 +501,8 @@ public class Case {
* @param caseMetadataFilePath The path of the case metadata (.aut) file. * @param caseMetadataFilePath The path of the case metadata (.aut) file.
* *
* @throws CaseActionException if there is a problem opening the case. The * @throws CaseActionException if there is a problem opening the case. The
* exception will have a user-friendly message * exception will have a user-friendly message and may be a wrapper for a
* and may be a wrapper for a lower-level * lower-level exception.
* exception.
*/ */
@Messages({ @Messages({
"# {0} - exception message", "Case.openException.couldNotOpenCase=Could not open case: {0}", "# {0} - exception message", "Case.openException.couldNotOpenCase=Could not open case: {0}",
@ -568,6 +565,7 @@ public class Case {
* *
* IMPORTANT: This method should not be called in the event dispatch thread * IMPORTANT: This method should not be called in the event dispatch thread
* (EDT). * (EDT).
*
* @throws CaseActionException * @throws CaseActionException
*/ */
@Messages({ @Messages({
@ -607,9 +605,8 @@ public class Case {
* (EDT). * (EDT).
* *
* @throws CaseActionException if there is a problem deleting the case. The * @throws CaseActionException if there is a problem deleting the case. The
* exception will have a user-friendly message * exception will have a user-friendly message and may be a wrapper for a
* and may be a wrapper for a lower-level * lower-level exception.
* exception.
*/ */
public static void deleteCurrentCase() throws CaseActionException { public static void deleteCurrentCase() throws CaseActionException {
synchronized (currentCaseWriteLock) { synchronized (currentCaseWriteLock) {
@ -629,14 +626,14 @@ public class Case {
* @param metadata The metadata for the case to delete. * @param metadata The metadata for the case to delete.
* *
* @throws CaseActionException if there is a problem deleting the case. The * @throws CaseActionException if there is a problem deleting the case. The
* exception will have a user-friendly message * exception will have a user-friendly message and may be a wrapper for a
* and may be a wrapper for a lower-level * lower-level exception.
* exception.
*/ */
@Messages({ @Messages({
"# {0} - exception message", "Case.deleteException.couldNotDeleteCase=Could not delete case: {0}", "# {0} - exception message", "Case.deleteException.couldNotDeleteCase=Could not delete case: {0}",
"Case.progressIndicatorTitle.deletingCase=Deleting Case", "Case.progressIndicatorTitle.deletingCase=Deleting Case",
"Case.exceptionMessage.cannotDeleteCurrentCase=Cannot delete current case, it must be closed first", "Case.exceptionMessage.cannotDeleteCurrentCase=Cannot delete current case, it must be closed first",
"Case.progressMessage.checkingForOtherUser=Checking to see if another user has the case open...",
"Case.progressMessage.deletingTextIndex=Deleting text index...", "Case.progressMessage.deletingTextIndex=Deleting text index...",
"Case.progressMessage.deletingCaseDatabase=Deleting case database...", "Case.progressMessage.deletingCaseDatabase=Deleting case database...",
"Case.exceptionMessage.cancelled=Cancelled by user" "Case.exceptionMessage.cancelled=Cancelled by user"
@ -672,7 +669,7 @@ public class Case {
* First, acquire an exclusive case directory lock. The case * First, acquire an exclusive case directory lock. The case
* cannot be deleted if another node has it open. * cannot be deleted if another node has it open.
*/ */
progressIndicator.start(Bundle.Case_progressMessage_acquiringLocks()); progressIndicator.start(Bundle.Case_progressMessage_checkingForOtherUser());
try (CoordinationService.Lock dirLock = CoordinationService.getInstance().tryGetExclusiveLock(CategoryNode.CASES, metadata.getCaseDirectory())) { try (CoordinationService.Lock dirLock = CoordinationService.getInstance().tryGetExclusiveLock(CategoryNode.CASES, metadata.getCaseDirectory())) {
assert (null != dirLock); assert (null != dirLock);
@ -1336,8 +1333,7 @@ public class Case {
* @return A list of data sources. * @return A list of data sources.
* *
* @throws org.sleuthkit.datamodel.TskCoreException if there is a problem * @throws org.sleuthkit.datamodel.TskCoreException if there is a problem
* querying the case * querying the case database.
* database.
*/ */
public List<Content> getDataSources() throws TskCoreException { public List<Content> getDataSources() throws TskCoreException {
List<Content> list = caseDb.getRootObjects(); List<Content> list = caseDb.getRootObjects();
@ -1410,8 +1406,8 @@ public class Case {
* This should not be called from the event dispatch thread (EDT) * This should not be called from the event dispatch thread (EDT)
* *
* @param eventId A unique identifier for the event. This UUID must be used * @param eventId A unique identifier for the event. This UUID must be used
* to call notifyFailedAddingDataSource or * to call notifyFailedAddingDataSource or notifyNewDataSource after the
* notifyNewDataSource after the data source is added. * data source is added.
*/ */
public void notifyAddingDataSource(UUID eventId) { public void notifyAddingDataSource(UUID eventId) {
eventPublisher.publish(new AddingDataSourceEvent(eventId)); eventPublisher.publish(new AddingDataSourceEvent(eventId));
@ -1424,8 +1420,7 @@ public class Case {
* This should not be called from the event dispatch thread (EDT) * This should not be called from the event dispatch thread (EDT)
* *
* @param addingDataSourceEventId The unique identifier for the * @param addingDataSourceEventId The unique identifier for the
* corresponding adding data source event * corresponding adding data source event (see notifyAddingDataSource).
* (see notifyAddingDataSource).
*/ */
public void notifyFailedAddingDataSource(UUID addingDataSourceEventId) { public void notifyFailedAddingDataSource(UUID addingDataSourceEventId) {
eventPublisher.publish(new AddingDataSourceFailedEvent(addingDataSourceEventId)); eventPublisher.publish(new AddingDataSourceFailedEvent(addingDataSourceEventId));
@ -1439,8 +1434,7 @@ public class Case {
* *
* @param dataSource The data source. * @param dataSource The data source.
* @param addingDataSourceEventId The unique identifier for the * @param addingDataSourceEventId The unique identifier for the
* corresponding adding data source event * corresponding adding data source event (see notifyAddingDataSource).
* (see notifyAddingDataSource).
*/ */
public void notifyDataSourceAdded(Content dataSource, UUID addingDataSourceEventId) { public void notifyDataSourceAdded(Content dataSource, UUID addingDataSourceEventId) {
eventPublisher.publish(new DataSourceAddedEvent(dataSource, addingDataSourceEventId)); eventPublisher.publish(new DataSourceAddedEvent(dataSource, addingDataSourceEventId));
@ -1583,28 +1577,26 @@ public class Case {
} }
/** /**
* @param caseDir The full path of the case directory. The directory * @param caseDir The full path of the case directory. The directory will be
* will be created if it doesn't already exist; if it * created if it doesn't already exist; if it exists, it is ASSUMED it was
* exists, it is ASSUMED it was created by calling * created by calling createCaseDirectory.
* createCaseDirectory.
* @param caseDisplayName The display name of case, which may be changed * @param caseDisplayName The display name of case, which may be changed
* later by the user. * later by the user.
* @param caseNumber The case number, can be the empty string. * @param caseNumber The case number, can be the empty string.
* @param examiner The examiner to associate with the case, can be * @param examiner The examiner to associate with the case, can be the empty
* the empty string. * string.
* @param caseType The type of case (single-user or multi-user). * @param caseType The type of case (single-user or multi-user).
* *
* @throws CaseActionException if there is a problem creating the case. The * @throws CaseActionException if there is a problem creating the case. The
* exception will have a user-friendly message * exception will have a user-friendly message and may be a wrapper for a
* and may be a wrapper for a lower-level * lower-level exception.
* exception.
*/ */
@Messages({ @Messages({
"Case.exceptionMessage.illegalCaseName=Case name contains illegal characters.", "Case.exceptionMessage.illegalCaseName=Case name contains illegal characters.",
"Case.progressIndicatorTitle.creatingCase=Creating Case", "Case.progressIndicatorTitle.creatingCase=Creating Case",
"Case.progressIndicatorCancelButton.label=Cancel", "Case.progressIndicatorCancelButton.label=Cancel",
"Case.progressMessage.preparing=Preparing...", "Case.progressMessage.preparing=Preparing...",
"Case.progressMessage.acquiringLocks=<html>Preparing to open case resources.<br>This may take time if another user is upgrading the case.</html>" "Case.progressMessage.openingCaseResources=<html>Preparing to open case resources.<br>This may take time if another user is upgrading the case.</html>"
}) })
private void open(String caseDir, String caseDisplayName, String caseNumber, String examiner, CaseType caseType) throws CaseActionException { private void open(String caseDir, String caseDisplayName, String caseNumber, String examiner, CaseType caseType) throws CaseActionException {
/* /*
@ -1652,7 +1644,7 @@ public class Case {
* First, acquire an exclusive case name lock to prevent two * First, acquire an exclusive case name lock to prevent two
* nodes from creating the same case at the same time. * nodes from creating the same case at the same time.
*/ */
progressIndicator.start(Bundle.Case_progressMessage_acquiringLocks()); progressIndicator.start(Bundle.Case_progressMessage_openingCaseResources());
try (CoordinationService.Lock nameLock = Case.acquireExclusiveCaseNameLock(caseName)) { try (CoordinationService.Lock nameLock = Case.acquireExclusiveCaseNameLock(caseName)) {
assert (null != nameLock); assert (null != nameLock);
/* /*
@ -1718,21 +1710,19 @@ public class Case {
/** /**
* Creates and opens a new case. * Creates and opens a new case.
* *
* @param caseDir The full path of the case directory. The directory * @param caseDir The full path of the case directory. The directory will be
* will be created if it doesn't already exist; if it * created if it doesn't already exist; if it exists, it is ASSUMED it was
* exists, it is ASSUMED it was created by calling * created by calling createCaseDirectory.
* createCaseDirectory.
* @param caseDisplayName The display name of case, which may be changed * @param caseDisplayName The display name of case, which may be changed
* later by the user. * later by the user.
* @param caseNumber The case number, can be the empty string. * @param caseNumber The case number, can be the empty string.
* @param examiner The examiner to associate with the case, can be * @param examiner The examiner to associate with the case, can be the empty
* the empty string. * string.
* @param caseType The type of case (single-user or multi-user). * @param caseType The type of case (single-user or multi-user).
* *
* @throws CaseActionException if there is a problem creating the case. The * @throws CaseActionException if there is a problem creating the case. The
* exception will have a user-friendly message * exception will have a user-friendly message and may be a wrapper for a
* and may be a wrapper for a lower-level * lower-level exception.
* exception.
*/ */
@Messages({ @Messages({
"Case.progressMessage.creatingCaseDirectory=Creating case directory...", "Case.progressMessage.creatingCaseDirectory=Creating case directory...",
@ -1819,9 +1809,8 @@ public class Case {
* @param caseMetadataFilePath The apth to the case metadata file. * @param caseMetadataFilePath The apth to the case metadata file.
* *
* @throws CaseActionException if there is a problem creating the case. The * @throws CaseActionException if there is a problem creating the case. The
* exception will have a user-friendly message * exception will have a user-friendly message and may be a wrapper for a
* and may be a wrapper for a lower-level * lower-level exception.
* exception.
*/ */
private void open(Path caseMetadataFilePath) throws CaseActionException { private void open(Path caseMetadataFilePath) throws CaseActionException {
/* /*
@ -1872,7 +1861,7 @@ public class Case {
* as long as this node has this case open, in order to prevent * as long as this node has this case open, in order to prevent
* deletion of the case by another node. * deletion of the case by another node.
*/ */
progressIndicator.start(Bundle.Case_progressMessage_acquiringLocks()); progressIndicator.start(Bundle.Case_progressMessage_openingCaseResources());
acquireSharedCaseDirLock(caseMetadata.getCaseDirectory()); acquireSharedCaseDirLock(caseMetadata.getCaseDirectory());
/* /*
* Next, acquire an exclusive case resources lock to ensure only * Next, acquire an exclusive case resources lock to ensure only
@ -1934,9 +1923,8 @@ public class Case {
* @param progressIndicator A progress indicator. * @param progressIndicator A progress indicator.
* *
* @throws CaseActionException if there is a problem opening the case. The * @throws CaseActionException if there is a problem opening the case. The
* exception will have a user-friendly message * exception will have a user-friendly message and may be a wrapper for a
* and may be a wrapper for a lower-level * lower-level exception.
* exception.
*/ */
@Messages({ @Messages({
"Case.progressMessage.openingCaseDatabase=Opening case database...", "Case.progressMessage.openingCaseDatabase=Opening case database...",
@ -2131,6 +2119,7 @@ public class Case {
* @param progressIndicator A progress indicator. * @param progressIndicator A progress indicator.
*/ */
@Messages({ @Messages({
"Case.progressMessage.closingCaseResources=<html>Preparing to close case resources.<br>This may take time if another user is upgrading the case.</html>",
"Case.progressMessage.notifyingCaseEventSubscribers=Notifying case event subscribers...", "Case.progressMessage.notifyingCaseEventSubscribers=Notifying case event subscribers...",
"Case.progressMessage.clearingTempDirectory=Clearing case temp directory...", "Case.progressMessage.clearingTempDirectory=Clearing case temp directory...",
"Case.progressMessage.closingCaseLevelServices=Closing case-level services...", "Case.progressMessage.closingCaseLevelServices=Closing case-level services...",
@ -2139,7 +2128,6 @@ public class Case {
"Case.progressMessage.closingCaseDatabase=Closing case database...", "Case.progressMessage.closingCaseDatabase=Closing case database...",
"Case.progressMessage.tearingDownTskErrorReporting=Tearing down SleuthKit error reporting..." "Case.progressMessage.tearingDownTskErrorReporting=Tearing down SleuthKit error reporting..."
}) })
private void close() throws CaseActionException { private void close() throws CaseActionException {
/* /*
* Set up either a GUI progress indicator or a logging progress * Set up either a GUI progress indicator or a logging progress
@ -2172,7 +2160,7 @@ public class Case {
* node at a time can create/open/upgrade/close the case * node at a time can create/open/upgrade/close the case
* resources. * resources.
*/ */
progressIndicator.start(Bundle.Case_progressMessage_acquiringLocks()); progressIndicator.start(Bundle.Case_progressMessage_closingCaseResources());
try (CoordinationService.Lock resourcesLock = acquireExclusiveCaseResourcesLock(caseMetadata.getCaseName())) { try (CoordinationService.Lock resourcesLock = acquireExclusiveCaseResourcesLock(caseMetadata.getCaseName())) {
assert (null != resourcesLock); assert (null != resourcesLock);
close(progressIndicator); close(progressIndicator);
@ -2435,20 +2423,18 @@ public class Case {
/** /**
* Creates a new, single-user Autopsy case. * Creates a new, single-user Autopsy case.
* *
* @param caseDir The full path of the case directory. The directory * @param caseDir The full path of the case directory. The directory will be
* will be created if it doesn't already exist; if it * created if it doesn't already exist; if it exists, it is ASSUMED it was
* exists, it is ASSUMED it was created by calling * created by calling createCaseDirectory.
* createCaseDirectory.
* @param caseDisplayName The display name of case, which may be changed * @param caseDisplayName The display name of case, which may be changed
* later by the user. * later by the user.
* @param caseNumber The case number, can be the empty string. * @param caseNumber The case number, can be the empty string.
* @param examiner The examiner to associate with the case, can be * @param examiner The examiner to associate with the case, can be the empty
* the empty string. * string.
* *
* @throws CaseActionException if there is a problem creating the case. The * @throws CaseActionException if there is a problem creating the case. The
* exception will have a user-friendly message * exception will have a user-friendly message and may be a wrapper for a
* and may be a wrapper for a lower-level * lower-level exception.
* exception.
* @deprecated Use createAsCurrentCase instead. * @deprecated Use createAsCurrentCase instead.
*/ */
@Deprecated @Deprecated
@ -2459,21 +2445,19 @@ public class Case {
/** /**
* Creates a new Autopsy case and makes it the current case. * Creates a new Autopsy case and makes it the current case.
* *
* @param caseDir The full path of the case directory. The directory * @param caseDir The full path of the case directory. The directory will be
* will be created if it doesn't already exist; if it * created if it doesn't already exist; if it exists, it is ASSUMED it was
* exists, it is ASSUMED it was created by calling * created by calling createCaseDirectory.
* createCaseDirectory.
* @param caseDisplayName The display name of case, which may be changed * @param caseDisplayName The display name of case, which may be changed
* later by the user. * later by the user.
* @param caseNumber The case number, can be the empty string. * @param caseNumber The case number, can be the empty string.
* @param examiner The examiner to associate with the case, can be * @param examiner The examiner to associate with the case, can be the empty
* the empty string. * string.
* @param caseType The type of case (single-user or multi-user). * @param caseType The type of case (single-user or multi-user).
* *
* @throws CaseActionException if there is a problem creating the case. The * @throws CaseActionException if there is a problem creating the case. The
* exception will have a user-friendly message * exception will have a user-friendly message and may be a wrapper for a
* and may be a wrapper for a lower-level * lower-level exception.
* exception.
* @deprecated Use createAsCurrentCase instead. * @deprecated Use createAsCurrentCase instead.
*/ */
@Deprecated @Deprecated
@ -2487,9 +2471,8 @@ public class Case {
* @param caseMetadataFilePath The path of the case metadata (.aut) file. * @param caseMetadataFilePath The path of the case metadata (.aut) file.
* *
* @throws CaseActionException if there is a problem opening the case. The * @throws CaseActionException if there is a problem opening the case. The
* exception will have a user-friendly message * exception will have a user-friendly message and may be a wrapper for a
* and may be a wrapper for a lower-level * lower-level exception.
* exception.
* @deprecated Use openAsCurrentCase instead. * @deprecated Use openAsCurrentCase instead.
*/ */
@Deprecated @Deprecated
@ -2501,9 +2484,8 @@ public class Case {
* Closes this Autopsy case. * Closes this Autopsy case.
* *
* @throws CaseActionException if there is a problem closing the case. The * @throws CaseActionException if there is a problem closing the case. The
* exception will have a user-friendly message * exception will have a user-friendly message and may be a wrapper for a
* and may be a wrapper for a lower-level * lower-level exception.
* exception.
* @deprecated Use closeCurrentCase instead. * @deprecated Use closeCurrentCase instead.
*/ */
@Deprecated @Deprecated