From 1b26096503072026fcc0cd32502c117b79defcfc Mon Sep 17 00:00:00 2001 From: millmanorama Date: Thu, 22 Jun 2017 12:53:24 +0200 Subject: [PATCH] rename queueDBWorkerTask ->queueDBTask, don't bother putting task on bg thread, remove unused executor --- .../imagegallery/ImageGalleryController.java | 47 +++++++--------- .../actions/CategorizeAction.java | 2 +- .../imagegallery/actions/NextUnseenGroup.java | 56 ++++++++----------- 3 files changed, 42 insertions(+), 63 deletions(-) diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/ImageGalleryController.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/ImageGalleryController.java index 7d93c28c77..ba2de01a6c 100644 --- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/ImageGalleryController.java +++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/ImageGalleryController.java @@ -25,7 +25,6 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; import java.util.Objects; -import java.util.concurrent.Executor; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.logging.Level; @@ -88,18 +87,11 @@ import org.sleuthkit.datamodel.TskData; * Connects different parts of ImageGallery together and is hub for flow of * control. */ -public final class ImageGalleryController implements Executor { +public final class ImageGalleryController { private static final Logger LOGGER = Logger.getLogger(ImageGalleryController.class.getName()); private static ImageGalleryController instance; - private final Region infoOverLayBackground = new Region() { - { - setBackground(new Background(new BackgroundFill(Color.GREY, CornerRadii.EMPTY, Insets.EMPTY))); - setOpacity(.4); - } - }; - /** * true if Image Gallery should listen to ingest events, false if it should * not listen to speed up ingest @@ -112,7 +104,7 @@ public final class ImageGalleryController implements Executor { private final ReadOnlyBooleanWrapper metaDataCollapsed = new ReadOnlyBooleanWrapper(false); private final ReadOnlyDoubleWrapper thumbnailSize = new ReadOnlyDoubleWrapper(100); private final ReadOnlyBooleanWrapper regroupDisabled = new ReadOnlyBooleanWrapper(false); - private final ReadOnlyIntegerWrapper queueSizeProperty = new ReadOnlyIntegerWrapper(0); + private final ReadOnlyIntegerWrapper dbTaskQueueSize = new ReadOnlyIntegerWrapper(0); private final FileIDSelectionModel selectionModel = new FileIDSelectionModel(this); @@ -128,19 +120,18 @@ public final class ImageGalleryController implements Executor { private StackPane fullUIStackPane; private StackPane centralStackPane; private Node infoOverlay; - - private final Executor execDelegate = Executors.newSingleThreadExecutor(); + private final Region infoOverLayBackground = new Region() { + { + setBackground(new Background(new BackgroundFill(Color.GREY, CornerRadii.EMPTY, Insets.EMPTY))); + setOpacity(.4); + } + }; private ListeningExecutorService dbExecutor; private SleuthkitCase sleuthKitCase; private DrawableDB db; - @Override - public void execute(Runnable command) { - execDelegate.execute(command); - } - public static synchronized ImageGalleryController getDefault() { if (instance == null) { instance = new ImageGalleryController(); @@ -221,7 +212,7 @@ public final class ImageGalleryController implements Executor { //if we just turned on listening and a case is open and that case is not up to date if (newValue && !oldValue && Case.isCaseOpen() && ImageGalleryModule.isDrawableDBStale(Case.getCurrentCase())) { //populate the db - queueDBWorkerTask(new CopyAnalyzedFiles(instance, db, sleuthKitCase)); + queueDBTask(new CopyAnalyzedFiles(instance, db, sleuthKitCase)); } }); @@ -256,7 +247,7 @@ public final class ImageGalleryController implements Executor { ingestManager.addIngestModuleEventListener(ingestEventHandler); ingestManager.addIngestJobEventListener(ingestEventHandler); - queueSizeProperty.addListener(obs -> this.updateRegroupDisabled()); + dbTaskQueueSize.addListener(obs -> this.updateRegroupDisabled()); } public ReadOnlyBooleanProperty getCanAdvance() { @@ -285,7 +276,7 @@ public final class ImageGalleryController implements Executor { @ThreadConfined(type = ThreadConfined.ThreadType.JFX) private void updateRegroupDisabled() { - regroupDisabled.set((queueSizeProperty.get() > 0) || IngestManager.getInstance().isIngestRunning()); + regroupDisabled.set((dbTaskQueueSize.get() > 0) || IngestManager.getInstance().isIngestRunning()); } /** @@ -316,7 +307,7 @@ public final class ImageGalleryController implements Executor { new ProgressIndicator())); } - } else if (queueSizeProperty.get() > 0) { + } else if (dbTaskQueueSize.get() > 0) { replaceNotification(fullUIStackPane, new NoGroupsDialog(Bundle.ImageGalleryController_noGroupsDlg_msg3(), new ProgressIndicator())); @@ -436,7 +427,7 @@ public final class ImageGalleryController implements Executor { * * @param bgTask */ - public synchronized void queueDBWorkerTask(BackgroundTask bgTask) { + public synchronized void queueDBTask(BackgroundTask bgTask) { if (dbExecutor == null || dbExecutor.isShutdown()) { dbExecutor = getNewDBExecutor(); } @@ -446,11 +437,11 @@ public final class ImageGalleryController implements Executor { } private void incrementQueueSize() { - Platform.runLater(() -> queueSizeProperty.set(queueSizeProperty.get() + 1)); + Platform.runLater(() -> dbTaskQueueSize.set(dbTaskQueueSize.get() + 1)); } private void decrementQueueSize() { - Platform.runLater(() -> queueSizeProperty.set(queueSizeProperty.get() - 1)); + Platform.runLater(() -> dbTaskQueueSize.set(dbTaskQueueSize.get() - 1)); } @Nullable @@ -514,7 +505,7 @@ public final class ImageGalleryController implements Executor { } public ReadOnlyIntegerProperty getDBTasksQueueSizeProperty() { - return queueSizeProperty.getReadOnlyProperty(); + return dbTaskQueueSize.getReadOnlyProperty(); } public synchronized SleuthkitCase getSleuthKitCase() { @@ -895,11 +886,11 @@ public final class ImageGalleryController implements Executor { synchronized (ImageGalleryController.this) { if (ImageGalleryModule.isDrawableAndNotKnown(file)) { //this file should be included and we don't already know about it from hash sets (NSRL) - queueDBWorkerTask(new UpdateFileTask(file, db)); + queueDBTask(new UpdateFileTask(file, db)); } else if (FileTypeUtils.getAllSupportedExtensions().contains(file.getNameExtension())) { //doing this check results in fewer tasks queued up, and faster completion of db update //this file would have gotten scooped up in initial grab, but actually we don't need it - queueDBWorkerTask(new RemoveFileTask(file, db)); + queueDBTask(new RemoveFileTask(file, db)); } } } catch (TskCoreException | FileTypeDetector.FileTypeDetectorInitException ex) { @@ -945,7 +936,7 @@ public final class ImageGalleryController implements Executor { //copy all file data to drawable databse Content newDataSource = (Content) evt.getNewValue(); if (isListeningEnabled()) { - queueDBWorkerTask(new PrePopulateDataSourceFiles(newDataSource, ImageGalleryController.this, getDatabase(), getSleuthKitCase())); + queueDBTask(new PrePopulateDataSourceFiles(newDataSource, ImageGalleryController.this, getDatabase(), getSleuthKitCase())); } else {//TODO: keep track of what we missed for later setStale(true); } diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/actions/CategorizeAction.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/actions/CategorizeAction.java index e0b1cdbc15..0cbef7e5d1 100644 --- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/actions/CategorizeAction.java +++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/actions/CategorizeAction.java @@ -87,7 +87,7 @@ public class CategorizeAction extends Action { final void addCatToFiles(Set ids) { Logger.getAnonymousLogger().log(Level.INFO, "categorizing{0} as {1}", new Object[]{ids.toString(), cat.getDisplayName()}); //NON-NLS - controller.queueDBWorkerTask(new CategorizeTask(ids, cat, createUndo)); + controller.queueDBTask(new CategorizeTask(ids, cat, createUndo)); } /** diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/actions/NextUnseenGroup.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/actions/NextUnseenGroup.java index a5e9215a6b..fe12dfe010 100644 --- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/actions/NextUnseenGroup.java +++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/actions/NextUnseenGroup.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2013-15 Basis Technology Corp. + * Copyright 2011-17 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -21,22 +21,23 @@ package org.sleuthkit.autopsy.imagegallery.actions; import java.util.Optional; import javafx.beans.Observable; import javafx.beans.binding.ObjectExpression; -import javafx.concurrent.Task; -import javafx.event.ActionEvent; +import javafx.collections.ObservableList; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import org.controlsfx.control.action.Action; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.coreutils.ThreadConfined; import org.sleuthkit.autopsy.imagegallery.ImageGalleryController; +import org.sleuthkit.autopsy.imagegallery.datamodel.grouping.DrawableGroup; +import org.sleuthkit.autopsy.imagegallery.datamodel.grouping.GroupManager; import org.sleuthkit.autopsy.imagegallery.datamodel.grouping.GroupViewState; /** - * Marks the currently fisplayed group as "seen" and advances to the next unseen + * Marks the currently displayed group as "seen" and advances to the next unseen * group */ @NbBundle.Messages({"NextUnseenGroup.markGroupSeen=Mark Group Seen", - "NextUnseenGroup.nextUnseenGroup=Next Unseen group"}) + "NextUnseenGroup.nextUnseenGroup=Next Unseen group"}) public class NextUnseenGroup extends Action { private static final Image END = @@ -47,54 +48,41 @@ public class NextUnseenGroup extends Action { private static final String MARK_GROUP_SEEN = Bundle.NextUnseenGroup_markGroupSeen(); private static final String NEXT_UNSEEN_GROUP = Bundle.NextUnseenGroup_nextUnseenGroup(); - private final ImageGalleryController controller; + private final GroupManager groupManager; + private final ObservableList unSeenGroups; + private final ObservableList analyzedGroups; public NextUnseenGroup(ImageGalleryController controller) { super(NEXT_UNSEEN_GROUP); - this.controller = controller; + groupManager = controller.getGroupManager(); + unSeenGroups = groupManager.getUnSeenGroups(); + analyzedGroups = groupManager.getAnalyzedGroups(); setGraphic(new ImageView(ADVANCE)); //TODO: do we need both these listeners? - controller.getGroupManager().getAnalyzedGroups().addListener((Observable observable) -> { - updateButton(); + analyzedGroups.addListener((Observable o) -> this.updateButton()); + unSeenGroups.addListener((Observable o) -> this.updateButton()); - }); - controller.getGroupManager().getUnSeenGroups().addListener((Observable observable) -> { - updateButton(); - }); - - setEventHandler((ActionEvent t) -> { + setEventHandler(event -> { //fx-thread //if there is a group assigned to the view, mark it as seen Optional.ofNullable(controller.viewState()) .map(ObjectExpression::getValue) .map(GroupViewState::getGroup) - .ifPresent(group -> controller.getGroupManager().markGroupSeen(group, true)); - controller.execute(new Task() { + .ifPresent(group -> groupManager.markGroupSeen(group, true)); - @Override - protected Void call() throws Exception { - if (false == controller.getGroupManager().getUnSeenGroups().isEmpty()) { - controller.advance(GroupViewState.tile(controller.getGroupManager().getUnSeenGroups().get(0)), true); - } - return null; - } - - @Override - protected void succeeded() { - super.succeeded(); - updateButton(); - } - }); + if (unSeenGroups.isEmpty() == false) { + controller.advance(GroupViewState.tile(unSeenGroups.get(0)), true); + updateButton(); + } }); - updateButton(); } @ThreadConfined(type = ThreadConfined.ThreadType.JFX) private void updateButton() { - setDisabled(controller.getGroupManager().getUnSeenGroups().isEmpty()); - if (controller.getGroupManager().getUnSeenGroups().size() <= 1) { + setDisabled(unSeenGroups.isEmpty()); + if (unSeenGroups.size() <= 1) { setText(MARK_GROUP_SEEN); setGraphic(new ImageView(END)); } else {