Fix bug in IGModule event handler and tidy up

This commit is contained in:
Richard Cordovano 2018-11-29 13:10:08 -05:00
parent 612b7f135b
commit 0229a19be1
2 changed files with 13 additions and 44 deletions

View File

@ -188,8 +188,7 @@ public final class ImageGalleryController {
return isCaseStale.get(); return isCaseStale.get();
} }
ImageGalleryController(@Nonnull Case newCase) throws TskCoreException { ImageGalleryController(@Nonnull Case newCase) throws TskCoreException {
this.autopsyCase = Objects.requireNonNull(newCase); this.autopsyCase = Objects.requireNonNull(newCase);
this.sleuthKitCase = newCase.getSleuthkitCase(); this.sleuthKitCase = newCase.getSleuthkitCase();

View File

@ -89,7 +89,7 @@ public class ImageGalleryModule {
Case currentCase = Case.getCurrentCaseThrows(); Case currentCase = Case.getCurrentCaseThrows();
controller = new ImageGalleryController(currentCase); controller = new ImageGalleryController(currentCase);
} catch (NoCurrentCaseException ex) { } catch (NoCurrentCaseException ex) {
throw new TskCoreException("no current case", ex); throw new TskCoreException("Failed to get ", ex);
} }
} }
return controller; return controller;
@ -97,7 +97,7 @@ public class ImageGalleryModule {
} }
/** /**
* Sets the implicit exit property attribute of the JavaFX Runtime to false * Sets the implicit exit property attribute of the JavaFX runtime to false
* and sets up listeners for application events. It is invoked at * and sets up listeners for application events. It is invoked at
* application start up by virtue of the OnStart annotation on the OnStart * application start up by virtue of the OnStart annotation on the OnStart
* class in this package. * class in this package.
@ -144,12 +144,8 @@ public class ImageGalleryModule {
* @return True or false. * @return True or false.
*/ */
static boolean isEnabledforCase(Case theCase) { static boolean isEnabledforCase(Case theCase) {
if (theCase != null) { String enabledforCaseProp = new PerCaseProperties(theCase).getConfigSetting(ImageGalleryModule.MODULE_NAME, PerCaseProperties.ENABLED);
String enabledforCaseProp = new PerCaseProperties(theCase).getConfigSetting(ImageGalleryModule.MODULE_NAME, PerCaseProperties.ENABLED); return isNotBlank(enabledforCaseProp) ? Boolean.valueOf(enabledforCaseProp) : ImageGalleryPreferences.isEnabledByDefault();
return isNotBlank(enabledforCaseProp) ? Boolean.valueOf(enabledforCaseProp) : ImageGalleryPreferences.isEnabledByDefault();
} else {
return false;
}
} }
/** /**
@ -175,18 +171,6 @@ public class ImageGalleryModule {
@Override @Override
public void propertyChange(PropertyChangeEvent event) { public void propertyChange(PropertyChangeEvent event) {
/*
* If running in "headless" mode, there is no need to process any
* ingest module events during the current session.
*
* Note that this check cannot be done earlier on start up because
* the "headless" property may not have been set yet.
*/
if (RuntimeProperties.runningWithGUI() == false) {
IngestManager.getInstance().removeIngestModuleEventListener(this);
return;
}
/* /*
* Only process individual files and artifacts in "real time" on the * Only process individual files and artifacts in "real time" on the
* node that is running the ingest job. On a remote node, image * node that is running the ingest job. On a remote node, image
@ -252,36 +236,22 @@ public class ImageGalleryModule {
@Override @Override
public void propertyChange(PropertyChangeEvent event) { public void propertyChange(PropertyChangeEvent event) {
/*
* If running in "headless" mode, there is no need to process any
* case events during the current session. Note that this check
* cannot be done earlier in onStart because the "headless" property
* may not have been set yet.
*/
if (RuntimeProperties.runningWithGUI() == false) {
Case.removePropertyChangeListener(this);
return;
}
Case.Events eventType = Case.Events.valueOf(event.getPropertyName()); Case.Events eventType = Case.Events.valueOf(event.getPropertyName());
if (eventType == Case.Events.CURRENT_CASE) { if (eventType == Case.Events.CURRENT_CASE) {
synchronized (controllerLock) { synchronized (controllerLock) {
if (event.getNewValue() != null && event.getNewValue() instanceof Case) { if (event.getNewValue() != null) {
/* /*
* CURRENT_CASE(_OPENED) event. Construct a new Image * CURRENT_CASE(_OPENED) event.
* Gallery controller.
*/ */
Case newCase = (Case) event.getNewValue(); Case newCase = (Case) event.getNewValue();
try { try {
controller = new ImageGalleryController(newCase); controller = new ImageGalleryController(newCase);
} catch (TskCoreException ex) { } catch (TskCoreException ex) {
logger.log(Level.SEVERE, "Failed to construct controller for new case", ex); logger.log(Level.SEVERE, String.format("Failed to construct controller for new case %s (%s)", newCase.getDisplayName(), newCase.getName()), ex);
} }
} else if (event.getOldValue() != null && event.getOldValue() instanceof Case) { } else if (event.getOldValue() != null) {
/* /*
* CURRENT_CASE(_CLOSED) event. Shut down the controller * CURRENT_CASE(_CLOSED) event.
* for the case and close the top component, if it is
* open.
*/ */
SwingUtilities.invokeLater(ImageGalleryTopComponent::closeTopComponent); SwingUtilities.invokeLater(ImageGalleryTopComponent::closeTopComponent);
controller.shutDown(); controller.shutDown();
@ -310,8 +280,8 @@ public class ImageGalleryModule {
final ContentTagAddedEvent tagAddedEvent = (ContentTagAddedEvent) event; final ContentTagAddedEvent tagAddedEvent = (ContentTagAddedEvent) event;
long objId = tagAddedEvent.getAddedTag().getContent().getId(); long objId = tagAddedEvent.getAddedTag().getContent().getId();
DrawableDB drawableDB = currentController.getDatabase(); DrawableDB drawableDB = currentController.getDatabase();
drawableDB.addTagCache(objId); drawableDB.addTagCache(objId); // RJCTODO: Why add the tag to the cache before doing the in DB check?
if (drawableDB.isInDB(objId)) { // RJCTODO: Put in cache before in DB check? if (drawableDB.isInDB(objId)) {
currentController.getTagsManager().fireTagAddedEvent(tagAddedEvent); currentController.getTagsManager().fireTagAddedEvent(tagAddedEvent);
} }
break; break;
@ -319,7 +289,7 @@ public class ImageGalleryModule {
final ContentTagDeletedEvent tagDeletedEvent = (ContentTagDeletedEvent) event; final ContentTagDeletedEvent tagDeletedEvent = (ContentTagDeletedEvent) event;
if (currentController.getDatabase().isInDB(tagDeletedEvent.getDeletedTagInfo().getContentID())) { if (currentController.getDatabase().isInDB(tagDeletedEvent.getDeletedTagInfo().getContentID())) {
currentController.getTagsManager().fireTagDeletedEvent(tagDeletedEvent); currentController.getTagsManager().fireTagDeletedEvent(tagDeletedEvent);
} } // RJCTODO: Why not remove the tag from the cache?
break; break;
default: default:
logger.log(Level.SEVERE, String.format("Received %s event with no subscription", event.getPropertyName())); //NON-NLS logger.log(Level.SEVERE, String.format("Received %s event with no subscription", event.getPropertyName())); //NON-NLS