19 package org.sleuthkit.datamodel;
21 import java.util.ArrayList;
22 import java.util.Collection;
23 import java.util.Collections;
24 import java.util.HashSet;
25 import java.util.List;
27 import java.util.logging.Level;
28 import java.util.logging.Logger;
38 private final List<SubFilter> andFilters;
48 this.andFilters =
new ArrayList<SubFilter>(andSubFilters);
61 return Collections.unmodifiableList(andFilters);
71 andFilters.add(subFilter);
115 return "Filters relationships by relationship type.";
127 if (relationshipTypes.isEmpty()) {
131 List<Integer> relationShipTypeIds =
new ArrayList<Integer>();
133 relationShipTypeIds.add(relType.getTypeID());
135 return " relationships.relationship_type IN ( "
136 + CommManagerSqlStringUtils.buildCSVString(relationShipTypeIds) +
" )";
145 private final long startDate;
146 private final long endDate;
147 private static final long SECS_PER_DAY = 86400;
156 this.startDate = startDate;
159 this.endDate = endDate + SECS_PER_DAY;
161 this.endDate = endDate;
184 return "Filters communications by date range.";
196 if ((0 == startDate) && (0 == endDate)) {
201 sql =
"(" +
" relationships.date_time IS NULL OR relationships.date_time >= " + startDate +
")";
204 if (!sql.isEmpty()) {
207 sql +=
"(" +
" relationships.date_time IS NULL OR relationships.date_time < " + endDate +
")";
228 this.accountTypes =
new HashSet<
Account.
Type>(accountTypes);
242 return "Filters accounts and relationships by account type.";
254 if (accountTypes.isEmpty()) {
258 List<Integer> type_ids =
new ArrayList<>();
260 type_ids.add(commsManager.getAccountTypeId(accountType));
262 String account_type_ids_list = CommManagerSqlStringUtils.buildCSVString(type_ids);
263 return " account_types.account_type_id IN ( " + account_type_ids_list +
" )";
273 private final Set<String> deviceIds;
282 this.deviceIds =
new HashSet<String>(deviceIds);
287 return "Filters accounts and relationships by device id.";
308 if (deviceIds.isEmpty()) {
312 List<Long> ds_ids =
new ArrayList<Long>();
313 for (String deviceId : deviceIds) {
315 ds_ids.addAll(commsManager.getSleuthkitCase().getDataSourceObjIds(deviceId));
317 Logger.getLogger(
DeviceFilter.class.getName()).log(Level.WARNING,
"failed to get datasource object ids for deviceId", ex);
320 String datasource_obj_ids_list = CommManagerSqlStringUtils.buildCSVString(ds_ids);
321 if (!datasource_obj_ids_list.isEmpty()) {
322 sql =
" relationships.data_source_obj_id IN ( " + datasource_obj_ids_list +
" )";
332 private final int limit;
356 return "Filters accounts and relationships by the most recent given relationships.";
362 return "ORDER BY relationships.date_time DESC LIMIT " + limit;
RelationshipTypeFilter(Collection< Relationship.Type > relationshipTypes)
MostRecentFilter(int limit)
void addAndFilter(SubFilter subFilter)
DeviceFilter(Collection< String > deviceIds)
Set< Account.Type > getAccountTypes()
String getSQL(CommunicationsManager commsManager)
String getSQL(CommunicationsManager commsManager)
Collection< String > getDevices()
String getSQL(CommunicationsManager commsManager)
List< SubFilter > getAndFilters()
DateRangeFilter(long startDate, long endDate)
String getSQL(CommunicationsManager commsManager)
AccountTypeFilter(Collection< Account.Type > accountTypes)
abstract String getDescription()