expose tag synced currentstate through Timelinecontroller rather than historymanager

This commit is contained in:
jmillman 2015-08-10 12:35:31 -04:00
parent 10ed0ff851
commit 440056d351
3 changed files with 25 additions and 23 deletions

View File

@ -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<ZoomParams> historyManager = new History<>();
@GuardedBy("this")
private final ReadOnlyObjectWrapper<ZoomParams> 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) {

View File

@ -163,14 +163,7 @@ public final class FilteredEventsModel {
repo.getTagNames().addListener((ListChangeListener.Change<? extends TagName> 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());

View File

@ -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);
}
}
}