19 package org.sleuthkit.autopsy.timeline.ui.filtering.datamodel;
21 import com.google.common.collect.ImmutableMap;
22 import com.google.common.collect.Lists;
23 import java.util.Arrays;
24 import java.util.HashSet;
25 import java.util.Objects;
27 import javafx.beans.property.BooleanProperty;
28 import javafx.beans.property.SimpleBooleanProperty;
29 import javafx.collections.ObservableList;
30 import org.openide.util.NbBundle;
32 import org.
sleuthkit.datamodel.TimelineFilter.DataSourceFilter;
33 import org.
sleuthkit.datamodel.TimelineFilter.DataSourcesFilter;
34 import org.
sleuthkit.datamodel.TimelineFilter.EventTypeFilter;
35 import org.
sleuthkit.datamodel.TimelineFilter.FileTypeFilter;
36 import org.
sleuthkit.datamodel.TimelineFilter.FileTypesFilter;
37 import org.
sleuthkit.datamodel.TimelineFilter.HashHitsFilter;
38 import org.
sleuthkit.datamodel.TimelineFilter.HashSetFilter;
39 import org.
sleuthkit.datamodel.TimelineFilter.HideKnownFilter;
40 import org.
sleuthkit.datamodel.TimelineFilter.RootFilter;
41 import org.
sleuthkit.datamodel.TimelineFilter.TextFilter;
56 private static final BooleanProperty
ALWAYS_TRUE =
new SimpleBooleanProperty(
true);
57 private final static BooleanProperty
ALWAYS_FALSE =
new SimpleBooleanProperty(
false);
59 private final Set<FilterState<? extends TimelineFilter>>
namedFilterStates =
new HashSet<>();
81 super(filter, Arrays.asList(eventTypeFilterState, knownFilterState, textFilterState, tagsFilterState, hashHitsFilterState, dataSourcesFilterState, fileTypesFilterState));
90 namedFilterStates.addAll(Arrays.asList(eventTypeFilterState, knownFilterState, textFilterState, tagsFilterState, hashHitsFilterState, dataSourcesFilterState, fileTypesFilterState));
119 .filter(filterState -> namedFilterStates.contains(filterState) ==
false)
120 .forEach(copy::addSubFilterState);
154 return new RootFilter(knownFilterState.getActiveFilter(),
157 textFilterState.getActiveFilter(),
164 @SuppressWarnings(
"rawtypes")
166 return hashHitsFilterState.isActive()
170 @SuppressWarnings(
"rawtypes")
172 return tagsFilterState.isActive()
178 ImmutableMap<FilterState<? extends TimelineFilter>, Integer> filterOrder
180 .put(knownFilterState, 0)
181 .put(textFilterState, 1)
182 .put(tagsFilterState, 2)
183 .put(hashHitsFilterState, 3)
184 .put(dataSourcesFilterState, 4)
186 .put(eventTypeFilterState, 6)
189 return super.getSubFilterStates().sorted((state1, state2)
190 -> Integer.compare(filterOrder.getOrDefault(state1, Integer.MAX_VALUE), filterOrder.getOrDefault(state2, Integer.MAX_VALUE)));
201 if (getClass() != obj.getClass()) {
207 if (
false == Objects.equals(
this.getFilter(), other.getFilter())) {
229 @NbBundle.Messages(
"RootFilterState.displayName=Root")
232 return Bundle.RootFilterState_displayName();
273 return "RootFilterState{"
274 +
"\neventTypeFilterState=" + eventTypeFilterState +
","
275 +
"\nknownFilterState=" + knownFilterState +
","
276 +
"\ntextFilterState=" + textFilterState +
","
277 +
"\ntagsFilterState=" + tagsFilterState +
","
278 +
"\nhashHitsFilterState=" + hashHitsFilterState +
","
279 +
"\ndataSourcesFilterState=" + dataSourcesFilterState +
","
282 +
"\nnamedFilterStates=" + namedFilterStates +
","
283 +
"\ndelegate=" + getFilter() +
'}';
SqlFilterState< HideKnownFilter > getKnownFilterState()
final CompoundFilterState< EventTypeFilter, EventTypeFilter > eventTypeFilterState
static final BooleanProperty ALWAYS_FALSE
CompoundFilterState< HashSetFilter, HashHitsFilter > getHashHitsFilterState()
boolean hasActiveHashFilters()
final SqlFilterState< HideKnownFilter > knownFilterState
final SqlFilterState< TextFilter > textFilterState
BooleanProperty activeProperty()
void addSubFilterState(FilterState< ?extends SubFilterType > newSubFilterState)
CompoundFilterState< FileTypeFilter, FileTypesFilter > getFileTypesFilterState()
SqlFilterState< TextFilter > getTextFilterState()
void setDisabled(Boolean act)
RootFilter getActiveFilter()
boolean equals(Object obj)
final CompoundFilterState< TimelineFilter.FileTypeFilter, TimelineFilter.FileTypesFilter > fileTypesFilterState
CompoundFilterState< EventTypeFilter, EventTypeFilter > getEventTypeFilterState()
TagsFilterState getTagsFilterState()
FilterType getActiveFilter()
BooleanProperty selectedProperty()
ObservableList< FilterState<?extends TimelineFilter > > getSubFilterStates()
final TagsFilterState tagsFilterState
final CompoundFilterState< DataSourceFilter, DataSourcesFilter > dataSourcesFilterState
final Set< FilterState<?extends TimelineFilter > > namedFilterStates
final CompoundFilterState< HashSetFilter, HashHitsFilter > hashHitsFilterState
static final BooleanProperty ALWAYS_TRUE
void setSelected(Boolean act)
ObservableList< FilterState< ?extends SubFilterType > > getSubFilterStates()
CompoundFilterState< DataSourceFilter, DataSourcesFilter > getDataSourcesFilterState()
RootFilterState intersect(FilterState< ?extends TimelineFilter > otherFilter)
FilterType getActiveFilter()
RootFilterState(RootFilter delegate)
BooleanProperty disabledProperty()
RootFilterState(RootFilter filter, CompoundFilterState< EventTypeFilter, EventTypeFilter > eventTypeFilterState, SqlFilterState< HideKnownFilter > knownFilterState, SqlFilterState< TextFilter > textFilterState, TagsFilterState tagsFilterState, CompoundFilterState< HashSetFilter, HashHitsFilter > hashHitsFilterState, CompoundFilterState< DataSourceFilter, DataSourcesFilter > dataSourcesFilterState, CompoundFilterState< FileTypeFilter, FileTypesFilter > fileTypesFilterState)
boolean hasActiveTagsFilters()