Autopsy  4.12.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
RootFilterState.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2018-2019 Basis Technology Corp.
5  * Contact: carrier <at> sleuthkit <dot> org
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 package org.sleuthkit.autopsy.timeline.ui.filtering.datamodel;
20 
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;
26 import java.util.Set;
27 import javafx.beans.property.BooleanProperty;
28 import javafx.beans.property.SimpleBooleanProperty;
29 import javafx.collections.ObservableList;
30 import org.openide.util.NbBundle;
31 import org.sleuthkit.datamodel.TimelineFilter;
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;
42 
46 public class RootFilterState extends CompoundFilterState<TimelineFilter, RootFilter> {
47 
54  private final CompoundFilterState<TimelineFilter.FileTypeFilter, TimelineFilter.FileTypesFilter> fileTypesFilterState;
55 
56  private static final BooleanProperty ALWAYS_TRUE = new SimpleBooleanProperty(true);
57  private final static BooleanProperty ALWAYS_FALSE = new SimpleBooleanProperty(false);
58 
59  private final Set<FilterState<? extends TimelineFilter>> namedFilterStates = new HashSet<>();
60 
61  public RootFilterState(RootFilter delegate) {
62  this(delegate,
63  new CompoundFilterState<>(delegate.getEventTypeFilter()),
64  new SqlFilterState<>(delegate.getKnownFilter()),
65  new SqlFilterState<>(delegate.getTextFilter()),
66  new TagsFilterState(delegate.getTagsFilter()),
67  new CompoundFilterState<>(delegate.getHashHitsFilter()),
68  new CompoundFilterState<>(delegate.getDataSourcesFilter()),
69  new CompoundFilterState<>(delegate.getFileTypesFilter())
70  );
71  }
72 
73  private RootFilterState(RootFilter filter,
75  SqlFilterState<HideKnownFilter> knownFilterState,
76  SqlFilterState<TextFilter> textFilterState,
77  TagsFilterState tagsFilterState,
81  super(filter, Arrays.asList(eventTypeFilterState, knownFilterState, textFilterState, tagsFilterState, hashHitsFilterState, dataSourcesFilterState, fileTypesFilterState));
82  this.eventTypeFilterState = eventTypeFilterState;
83  this.knownFilterState = knownFilterState;
84  this.textFilterState = textFilterState;
85  this.tagsFilterState = tagsFilterState;
86  this.hashHitsFilterState = hashHitsFilterState;
87  this.dataSourcesFilterState = dataSourcesFilterState;
88  this.fileTypesFilterState = fileTypesFilterState;
89 
90  namedFilterStates.addAll(Arrays.asList(eventTypeFilterState, knownFilterState, textFilterState, tagsFilterState, hashHitsFilterState, dataSourcesFilterState, fileTypesFilterState));
91  }
92 
103  copyOf.addSubFilterState(otherFilter);
104  return copyOf;
105  }
106 
107  @Override
109  RootFilterState copy = new RootFilterState(getFilter().copyOf(),
117  );
118  this.getSubFilterStates().stream()
119  .filter(filterState -> namedFilterStates.contains(filterState) == false)
120  .forEach(copy::addSubFilterState);
121  return copy;
122  }
123 
125  return eventTypeFilterState;
126  }
127 
129  return knownFilterState;
130  }
131 
133  return textFilterState;
134  }
135 
137  return tagsFilterState;
138  }
139 
141  return hashHitsFilterState;
142  }
143 
145  return dataSourcesFilterState;
146  }
147 
149  return fileTypesFilterState;
150  }
151 
152  @Override
153  public RootFilter getActiveFilter() {
154  return new RootFilter(knownFilterState.getActiveFilter(),
155  tagsFilterState.getActiveFilter(),
156  hashHitsFilterState.getActiveFilter(),
157  textFilterState.getActiveFilter(),
158  eventTypeFilterState.getActiveFilter(),
159  dataSourcesFilterState.getActiveFilter(),
162  }
163 
164  @SuppressWarnings("rawtypes")
165  public boolean hasActiveHashFilters() {
166  return hashHitsFilterState.isActive()
167  && hashHitsFilterState.getSubFilterStates().stream().anyMatch(FilterState::isActive);
168  }
169 
170  @SuppressWarnings("rawtypes")
171  public boolean hasActiveTagsFilters() {
172  return tagsFilterState.isActive()
173  && tagsFilterState.getSubFilterStates().stream().anyMatch(FilterState::isActive);
174  }
175 
176  @Override
177  public ObservableList<FilterState<? extends TimelineFilter>> getSubFilterStates() {
178  ImmutableMap<FilterState<? extends TimelineFilter>, Integer> filterOrder
179  = ImmutableMap.<FilterState<? extends TimelineFilter>, Integer>builder()
180  .put(knownFilterState, 0)
181  .put(textFilterState, 1)
182  .put(tagsFilterState, 2)
183  .put(hashHitsFilterState, 3)
184  .put(dataSourcesFilterState, 4)
185  .put(fileTypesFilterState, 5)
186  .put(eventTypeFilterState, 6)
187  .build();
188 
189  return super.getSubFilterStates().sorted((state1, state2)
190  -> Integer.compare(filterOrder.getOrDefault(state1, Integer.MAX_VALUE), filterOrder.getOrDefault(state2, Integer.MAX_VALUE)));
191  }
192 
193  @Override
194  public boolean equals(Object obj) {
195  if (this == obj) {
196  return true;
197  }
198  if (obj == null) {
199  return false;
200  }
201  if (getClass() != obj.getClass()) {
202  return false;
203  }
204 
205  final RootFilterState other = (RootFilterState) obj;
206 
207  if (false == Objects.equals(this.getFilter(), other.getFilter())) {
208  return false;
209  }
210 
211  return Objects.equals(this.getSubFilterStates(), other.getSubFilterStates());
212  }
213 
214  @Override
215  public int hashCode() {
216  return 7;
217  }
218 
219  @Override
220  public BooleanProperty activeProperty() {
221  return ALWAYS_TRUE;
222  }
223 
224  @Override
225  public BooleanProperty disabledProperty() {
226  return ALWAYS_FALSE;
227  }
228 
229  @NbBundle.Messages("RootFilterState.displayName=Root")
230  @Override
231  public String getDisplayName() {
232  return Bundle.RootFilterState_displayName();
233  }
234 
235  @Override
236  public boolean isActive() {
237  return true;
238  }
239 
240  @Override
241  public boolean isDisabled() {
242  return false;
243  }
244 
245  @Override
246  public boolean isSelected() {
247  return true;
248  }
249 
250  @Override
251  public BooleanProperty selectedProperty() {
252  return ALWAYS_TRUE;
253  }
254 
255  @Override
256  public void setDisabled(Boolean act) {
257  /*
258  * A RootFitlerState is always enabled, so disabling it is overridden as
259  * a no-op.
260  */
261  }
262 
263  @Override
264  public void setSelected(Boolean act) {
265  /*
266  * A RootFitlerState is always enabled, so enabling it is overridden as
267  * a no-op.
268  */
269  }
270 
271  @Override
272  public String toString() {
273  return "RootFilterState{"
274  + "\neventTypeFilterState=" + eventTypeFilterState + ","
275  + "\nknownFilterState=" + knownFilterState + ","
276  + "\ntextFilterState=" + textFilterState + ","
277  + "\ntagsFilterState=" + tagsFilterState + ","
278  + "\nhashHitsFilterState=" + hashHitsFilterState + ","
279  + "\ndataSourcesFilterState=" + dataSourcesFilterState + ","
280  + "\nfileTypesFilterState=" + fileTypesFilterState + ","
281  + "\nsubFilterStates=" + getSubFilterStates() + ","
282  + "\nnamedFilterStates=" + namedFilterStates + ","
283  + "\ndelegate=" + getFilter() + '}'; //NON-NLS
284  }
285 }
final CompoundFilterState< EventTypeFilter, EventTypeFilter > eventTypeFilterState
CompoundFilterState< HashSetFilter, HashHitsFilter > getHashHitsFilterState()
void addSubFilterState(FilterState< ?extends SubFilterType > newSubFilterState)
CompoundFilterState< FileTypeFilter, FileTypesFilter > getFileTypesFilterState()
final CompoundFilterState< TimelineFilter.FileTypeFilter, TimelineFilter.FileTypesFilter > fileTypesFilterState
CompoundFilterState< EventTypeFilter, EventTypeFilter > getEventTypeFilterState()
ObservableList< FilterState<?extends TimelineFilter > > getSubFilterStates()
final CompoundFilterState< DataSourceFilter, DataSourcesFilter > dataSourcesFilterState
final Set< FilterState<?extends TimelineFilter > > namedFilterStates
final CompoundFilterState< HashSetFilter, HashHitsFilter > hashHitsFilterState
ObservableList< FilterState< ?extends SubFilterType > > getSubFilterStates()
CompoundFilterState< DataSourceFilter, DataSourcesFilter > getDataSourcesFilterState()
RootFilterState intersect(FilterState< ?extends TimelineFilter > otherFilter)
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)

Copyright © 2012-2018 Basis Technology. Generated on: Wed Sep 18 2019
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.