Autopsy  3.1
Graphical digital forensics platform for The Sleuth Kit and other tools.
FilteredEventsModel.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2014 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.events;
20 
21 import java.util.Collection;
22 import java.util.List;
23 import java.util.Map;
24 import java.util.Set;
25 import javafx.beans.Observable;
26 import javafx.beans.property.ReadOnlyObjectProperty;
27 import javafx.beans.property.ReadOnlyObjectWrapper;
28 import javax.annotation.concurrent.GuardedBy;
29 import org.joda.time.DateTimeZone;
30 import org.joda.time.Interval;
39 
62 public class FilteredEventsModel {
63 
67  //requested time range, filter, event_type zoom, and description level of detail. if specifics are not passed to methods, the values of these members are used to query repository.
68  @GuardedBy("this")
69  private final ReadOnlyObjectWrapper<Interval> requestedTimeRange = new ReadOnlyObjectWrapper<>();
70 
71  @GuardedBy("this")
72  private final ReadOnlyObjectWrapper<Filter> requestedFilter = new ReadOnlyObjectWrapper<>(Filter.getDefaultFilter());
73 
74  @GuardedBy("this")
75  private final ReadOnlyObjectWrapper< EventTypeZoomLevel> requestedTypeZoom = new ReadOnlyObjectWrapper<>(EventTypeZoomLevel.BASE_TYPE);
76 
77  @GuardedBy("this")
78  private final ReadOnlyObjectWrapper< DescriptionLOD> requestedLOD = new ReadOnlyObjectWrapper<>(DescriptionLOD.SHORT);
79 
80  @GuardedBy("this")
81  private final ReadOnlyObjectWrapper<ZoomParams> requestedZoomParamters = new ReadOnlyObjectWrapper<>();
82 
88  @GuardedBy("this")
89  private final EventsRepository repo;
90 
91  public FilteredEventsModel(EventsRepository repo, ReadOnlyObjectProperty<ZoomParams> currentStateProperty) {
92  this.repo = repo;
93  requestedZoomParamters.addListener((Observable observable) -> {
94  final ZoomParams zoomParams = requestedZoomParamters.get();
95 
96  if (zoomParams != null) {
97  if (zoomParams.getTypeZoomLevel().equals(requestedTypeZoom.get()) == false
98  || zoomParams.getDescrLOD().equals(requestedLOD.get()) == false
99  || zoomParams.getFilter().equals(requestedFilter.get()) == false
100  || zoomParams.getTimeRange().equals(requestedTimeRange.get()) == false) {
101 
102  requestedTypeZoom.set(zoomParams.getTypeZoomLevel());
103  requestedFilter.set(zoomParams.getFilter().copyOf());
104  requestedTimeRange.set(zoomParams.getTimeRange());
105  requestedLOD.set(zoomParams.getDescrLOD());
106  }
107  }
108  });
109 
110  requestedZoomParamters.bind(currentStateProperty);
111  }
112 
113  public Interval getBoundingEventsInterval() {
114  return repo.getBoundingEventsInterval(getRequestedZoomParamters().get().getTimeRange(), getRequestedZoomParamters().get().getFilter());
115  }
116 
117  synchronized public ReadOnlyObjectProperty<ZoomParams> getRequestedZoomParamters() {
118  return requestedZoomParamters.getReadOnlyProperty();
119  }
120 
121  public TimeLineEvent getEventById(Long eventID) {
122  return repo.getEventById(eventID);
123  }
124 
125  public Set<Long> getEventIDs(Interval timeRange, Filter filter) {
126  final Interval overlap;
127  final IntersectionFilter intersect;
128  synchronized (this) {
129  overlap = getSpanningInterval().overlap(timeRange);
130  intersect = Filter.intersect(new Filter[]{filter, requestedFilter.get()});
131  }
132  return repo.getEventIDs(overlap, intersect);
133  }
134 
145  public Map<EventType, Long> getEventCounts(Interval timeRange) {
146 
147  final Filter filter;
148  final EventTypeZoomLevel typeZoom;
149  synchronized (this) {
150  filter = requestedFilter.get();
151  typeZoom = requestedTypeZoom.get();
152  }
153  return repo.countEvents(new ZoomParams(timeRange, typeZoom, filter, null));
154  }
155 
160  synchronized public ReadOnlyObjectProperty<Interval> timeRange() {
161  if (requestedTimeRange.get() == null) {
163  }
164  return requestedTimeRange.getReadOnlyProperty();
165  }
166 
167  synchronized public ReadOnlyObjectProperty<DescriptionLOD> descriptionLOD() {
168  return requestedLOD.getReadOnlyProperty();
169  }
170 
171  synchronized public ReadOnlyObjectProperty<Filter> filter() {
172  return requestedFilter.getReadOnlyProperty();
173  }
174 
179  public final Interval getSpanningInterval() {
180  return new Interval(getMinTime() * 1000, 1000 + getMaxTime() * 1000, DateTimeZone.UTC);
181  }
182 
186  public Interval getSpanningInterval(Collection<Long> eventIDs) {
187  return repo.getSpanningInterval(eventIDs);
188  }
189 
195  public final Long getMinTime() {
196  return repo.getMinTime();
197  }
198 
204  public final Long getMaxTime() {
205  return repo.getMaxTime();
206  }
207 
215  public List<AggregateEvent> getAggregatedEvents() {
216  final Interval range;
217  final Filter filter;
218  final EventTypeZoomLevel zoom;
219  final DescriptionLOD lod;
220  synchronized (this) {
221  range = requestedTimeRange.get();
222  filter = requestedFilter.get();
223  zoom = requestedTypeZoom.get();
224  lod = requestedLOD.get();
225  }
226  return repo.getAggregatedEvents(new ZoomParams(range, zoom, filter, lod));
227  }
228 
236  public List<AggregateEvent> getAggregatedEvents(ZoomParams params) {
237  return repo.getAggregatedEvents(params);
238  }
239 
240  synchronized public ReadOnlyObjectProperty<EventTypeZoomLevel> eventTypeZoom() {
241  return requestedTypeZoom.getReadOnlyProperty();
242  }
243 
244  synchronized public EventTypeZoomLevel getEventTypeZoom() {
245  return requestedTypeZoom.get();
246  }
247 
248 // synchronized public void requestZoomState(ZoomParams zCrumb, boolean force) {
249 // if (force
250 // || zCrumb.getTypeZoomLevel().equals(requestedTypeZoom.get()) == false
251 // || zCrumb.getDescrLOD().equals(requestedLOD.get()) == false
252 // || zCrumb.getFilter().equals(requestedFilter.get()) == false
253 // || zCrumb.getTimeRange().equals(requestedTimeRange.get()) == false) {
254 //
255 // requestedZoomParamters.set(zCrumb);
256 // requestedTypeZoom.set(zCrumb.getTypeZoomLevel());
257 // requestedFilter.set(zCrumb.getFilter().copyOf());
258 // requestedTimeRange.set(zCrumb.getTimeRange());
259 // requestedLOD.set(zCrumb.getDescrLOD());
260 // }
261 // }
263  return requestedLOD.get();
264  }
265 }
static IntersectionFilter intersect(ObservableList< Filter > filters)
Definition: Filter.java:38
synchronized ReadOnlyObjectProperty< Filter > filter()
Set< Long > getEventIDs(Interval timeRange, Filter filter)
Map< EventType, Long > countEvents(ZoomParams params)
List< AggregateEvent > getAggregatedEvents(ZoomParams params)
final ReadOnlyObjectWrapper< EventTypeZoomLevel > requestedTypeZoom
synchronized ReadOnlyObjectProperty< Interval > timeRange()
final ReadOnlyObjectWrapper< ZoomParams > requestedZoomParamters
final ReadOnlyObjectWrapper< Interval > requestedTimeRange
Map< EventType, Long > getEventCounts(Interval timeRange)
Interval getSpanningInterval(Collection< Long > eventIDs)
final ReadOnlyObjectWrapper< DescriptionLOD > requestedLOD
synchronized ReadOnlyObjectProperty< EventTypeZoomLevel > eventTypeZoom()
Set< Long > getEventIDs(Interval timeRange, Filter filter)
synchronized ReadOnlyObjectProperty< DescriptionLOD > descriptionLOD()
List< AggregateEvent > getAggregatedEvents(ZoomParams params)
Interval getBoundingEventsInterval(Interval timeRange, Filter filter)
synchronized ReadOnlyObjectProperty< ZoomParams > getRequestedZoomParamters()

Copyright © 2012-2015 Basis Technology. Generated on: Mon Oct 19 2015
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.