19 package org.sleuthkit.autopsy.timeline.ui.filtering.datamodel;
21 import com.google.common.collect.Lists;
22 import java.util.Collection;
23 import java.util.List;
24 import java.util.Objects;
25 import java.util.stream.Collectors;
26 import javafx.collections.FXCollections;
27 import javafx.collections.ListChangeListener;
28 import javafx.collections.ObservableList;
29 import org.openide.util.Exceptions;
31 import org.
sleuthkit.datamodel.TimelineFilter.CompoundFilter;
43 private final ObservableList< FilterState<? extends SubFilterType>>
subFilterStates = FXCollections.observableArrayList();
53 filter.getSubFilters().forEach(newSubFilter -> {
55 if (newSubFilter instanceof CompoundFilter<?>) {
56 @SuppressWarnings(value =
"unchecked")
78 subFilterStates.forEach(this::addSubFilterStateInternal);
86 getFilter().getSubFilters().addListener((ListChangeListener.Change<? extends SubFilterType> change) -> {
87 while (change.next()) {
88 change.getAddedSubList().forEach((SubFilterType newSubFilter) -> {
90 if (getSubFilterStates().stream().map(FilterState::getFilter).noneMatch(newSubFilter::equals)) {
92 if (newSubFilter instanceof CompoundFilter<?>) {
93 @SuppressWarnings(
"unchecked")
94 FilterState<SubFilterType> compoundFilterState = (FilterState<SubFilterType>) new CompoundFilterState<>((CompoundFilter<?>) newSubFilter);
95 addSubFilterStateInternal(compoundFilterState);
98 addSubFilterStateInternal(new SqlFilterState<>(newSubFilter));
105 }
catch (Exception e) {
106 Exceptions.printStackTrace(e);
115 selectedProperty().addListener(selectedProperty -> {
117 subFilterStates.forEach(subFilterState -> subFilterState.setSelected(
true));
128 boolean inactive = isActive() ==
false;
130 subFilterStates.forEach(subFilterState -> subFilterState.setDisabled(inactive));
142 SubFilterType filter = newSubFilterState.
getFilter();
146 addSubFilterStateInternal(newSubFilterState);
147 getFilter().getSubFilters().add(filter);
152 if (subFilterStates.contains(newSubFilterState) ==
false) {
153 subFilterStates.add(newSubFilterState);
158 newSubFilterState.
setDisabled(isActive() ==
false);
163 return subFilterStates;
168 @SuppressWarnings(
"unchecked")
173 copy.setSelected(isSelected());
174 copy.setDisabled(isDisabled());
179 @SuppressWarnings(
"unchecked")
180 public FilterType getActiveFilter() {
181 if (isActive() ==
false) {
185 List<SubFilterType> activeSubFilters = subFilterStates.stream()
186 .filter(filterState -> filterState.isActive())
187 .map(filterState -> filterState.getActiveFilter())
188 .collect(Collectors.toList());
189 FilterType copy = (FilterType) getFilter().
copyOf();
190 copy.getSubFilters().clear();
191 copy.getSubFilters().addAll(activeSubFilters);
198 int hash = super.hashCode();
199 hash = 41 * hash + Objects.hashCode(this.subFilterStates);
213 if (getClass() != obj.getClass()) {
218 if (!Objects.equals(
this.getFilter(), other.getFilter())) {
221 if (!Objects.equals(
this.isSelected(), other.isSelected())) {
224 if (!Objects.equals(
this.isDisabled(), other.isDisabled())) {
232 return "CompoundFilterState{ selected=" + isSelected() +
", disabled=" + isDisabled() +
", activeProp=" + isActive() +
",subFilterStates=" + subFilterStates +
'}';
void setDisabled(Boolean act)
CompoundFilterState< SubFilterType, FilterType > copyOf()
FilterState< FilterType > copyOf()
void addSubFilterState(FilterState< ?extends SubFilterType > newSubFilterState)
boolean equals(Object obj)
void addSubFilterStateInternal(FilterState< ?extends SubFilterType > newSubFilterState)
void configureListeners()
void disableSubFiltersIfNotActive()
final ObservableList< FilterState<?extends SubFilterType > > subFilterStates
ObservableList< FilterState< ?extends SubFilterType > > getSubFilterStates()
BooleanProperty selectedProperty()