From 440056d351a2639d4b61fe6acf3dc0bb470197c3 Mon Sep 17 00:00:00 2001 From: jmillman Date: Mon, 10 Aug 2015 12:35:31 -0400 Subject: [PATCH] expose tag synced currentstate through Timelinecontroller rather than historymanager --- .../autopsy/timeline/TimeLineController.java | 28 ++++++++++++------- .../timeline/events/FilteredEventsModel.java | 9 +----- .../timeline/events/db/EventsRepository.java | 11 ++++---- 3 files changed, 25 insertions(+), 23 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/timeline/TimeLineController.java b/Core/src/org/sleuthkit/autopsy/timeline/TimeLineController.java index f9dc3628ce..e6b9455359 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/TimeLineController.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/TimeLineController.java @@ -34,6 +34,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.logging.Level; import javafx.application.Platform; +import javafx.beans.InvalidationListener; import javafx.beans.Observable; import javafx.beans.property.ReadOnlyBooleanProperty; import javafx.beans.property.ReadOnlyBooleanWrapper; @@ -189,6 +190,9 @@ public class TimeLineController { @GuardedBy("this") private final History historyManager = new History<>(); + @GuardedBy("this") + private final ReadOnlyObjectWrapper currentState = new ReadOnlyObjectWrapper<>(); + //all members should be access with the intrinsict lock of this object held //selected events (ie shown in the result viewer) @GuardedBy("this") @@ -232,7 +236,15 @@ public class TimeLineController { public TimeLineController(Case autoCase) { this.autoCase = autoCase; //initalize repository and filteredEvents on creation - eventsRepository = new EventsRepository(autoCase, historyManager.currentState()); + historyManager.currentState().addListener(new InvalidationListener() { + + public void invalidated(Observable observable) { + ZoomParams currentState1 = historyManager.getCurrentState(); + eventsRepository.syncTagFilter(currentState1.getFilter().getTagsFilter()); + currentState.set(currentState1); + } + }); + eventsRepository = new EventsRepository(autoCase, currentState.getReadOnlyProperty()); filteredEvents = eventsRepository.getEventsModel(); InitialZoomState = new ZoomParams(filteredEvents.getSpanningInterval(), @@ -565,21 +577,17 @@ public class TimeLineController { } } - synchronized public ZoomParams advance() { - ZoomParams advance = historyManager.advance(); - eventsRepository.syncTagFilter(advance.getFilter().getTagsFilter()); - return advance; - + synchronized public void advance() { + historyManager.advance(); } - synchronized public ZoomParams retreat() { - ZoomParams retreat = historyManager.retreat(); - eventsRepository.syncTagFilter(retreat.getFilter().getTagsFilter()); - return retreat; + synchronized public void retreat() { + historyManager.retreat(); } synchronized private void advance(ZoomParams newState) { historyManager.advance(newState); + } public void selectTimeAndType(Interval interval, EventType type) { diff --git a/Core/src/org/sleuthkit/autopsy/timeline/events/FilteredEventsModel.java b/Core/src/org/sleuthkit/autopsy/timeline/events/FilteredEventsModel.java index 34fcce5400..307ae622bc 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/events/FilteredEventsModel.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/events/FilteredEventsModel.java @@ -163,14 +163,7 @@ public final class FilteredEventsModel { repo.getTagNames().addListener((ListChangeListener.Change c) -> { RootFilter rootFilter = filterProperty().get(); TagsFilter tagsFilter = rootFilter.getTagsFilter(); - while (c.next()) { - c.getRemoved().forEach(tagsFilter::removeFilterForTag); - c.getAddedSubList().forEach((TagName t) -> { - TagNameFilter tagFilter = new TagNameFilter(t); - tagsFilter.addSubFilter(tagFilter); - }); - - } + repo.syncTagFilter(tagsFilter); requestedFilter.set(rootFilter.copyOf()); }); requestedFilter.set(getDefaultFilter()); diff --git a/Core/src/org/sleuthkit/autopsy/timeline/events/db/EventsRepository.java b/Core/src/org/sleuthkit/autopsy/timeline/events/db/EventsRepository.java index acae9f619d..e680f8babf 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/events/db/EventsRepository.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/events/db/EventsRepository.java @@ -460,12 +460,12 @@ public class EventsRepository { if (!updatedEventIDs.isEmpty()) { aggregateEventsCache.invalidateAll(); idToEventCache.invalidateAll(updatedEventIDs); - updateTagFilters(); + updateTagNames(); } return updatedEventIDs; } - public void updateTagFilters() { + public void updateTagNames() { try { tagNames.setAll(autoCase.getSleuthkitCase().getTagNamesInUse()); @@ -478,8 +478,9 @@ public class EventsRepository { for (TagName t : tagNames) { tagsFilter.addSubFilter(new TagNameFilter(t)); } - tagsFilter.getSubFilters().removeIf((TagNameFilter t) -> { - return tagNames.contains(t.getTagName()) == false; - }); + + for (TagNameFilter t : tagsFilter.getSubFilters()) { + t.setDisabled(tagNames.contains(t.getTagName()) == false); + } } }