19 package org.sleuthkit.autopsy.discovery.search;
21 import java.util.ArrayList;
22 import java.util.Collections;
23 import java.util.HashMap;
24 import java.util.LinkedHashMap;
25 import java.util.List;
27 import java.util.stream.Collectors;
35 private final Group.GroupSortingAlgorithm groupSortingType;
36 private final DiscoveryAttributes.AttributeType attrType;
37 private final ResultsSorter fileSorter;
39 private final Map<GroupKey, Group> groupMap =
new HashMap<>();
40 private List<Group> groupList =
new ArrayList<>();
42 private static final long MAX_OUTPUT_FILES = 2000;
53 SearchResults(Group.GroupSortingAlgorithm groupSortingType, DiscoveryAttributes.AttributeType attrType,
54 ResultsSorter.SortingMethod fileSortingMethod) {
55 this.groupSortingType = groupSortingType;
56 this.attrType = attrType;
57 this.fileSorter =
new ResultsSorter(fileSortingMethod);
65 this.groupSortingType = Group.GroupSortingAlgorithm.BY_GROUP_NAME;
66 this.attrType =
new DiscoveryAttributes.FileSizeAttribute();
67 this.fileSorter =
new ResultsSorter(ResultsSorter.SortingMethod.BY_FILE_NAME);
75 void add(List<Result> results) {
76 for (Result result : results) {
78 GroupKey groupKey = attrType.getGroupKey(result);
80 if (!groupMap.containsKey(groupKey)) {
81 groupMap.put(groupKey,
new Group(groupSortingType, groupKey));
83 groupMap.get(groupKey).addResult(result);
91 void sortGroupsAndFiles() {
94 for (Group group : groupMap.values()) {
95 group.sortResults(fileSorter);
99 groupList =
new ArrayList<>(groupMap.values());
100 Collections.sort(groupList);
104 public String toString() {
105 String resultString =
"";
106 if (groupList == null) {
111 for (Group group : groupList) {
112 resultString += group.getDisplayName() +
"\n";
114 for (Result result : group.getResults()) {
115 resultString +=
" " + result.toString() +
"\n";
117 if (count > MAX_OUTPUT_FILES) {
118 resultString +=
"(truncated)";
131 List<String> getGroupNamesWithCounts() {
132 return groupList.stream().map(p -> p.getDisplayName() +
" (" + p.getResults().size() +
")").collect(Collectors.toList());
142 List<Result> getResultFilesInGroup(String groupName) {
143 if (groupName != null) {
144 final String modifiedGroupName = groupName.replaceAll(
" \\([0-9]+\\)$",
"");
146 java.util.Optional<Group> group = groupList.stream().filter(p -> p.getDisplayName().equals(modifiedGroupName)).findFirst();
147 if (group.isPresent()) {
148 return group.get().getResults();
151 return new ArrayList<>();
159 Map<GroupKey, List<Result>> toLinkedHashMap() throws DiscoveryException {
160 Map<GroupKey, List<Result>> map =
new LinkedHashMap<>();
163 sortGroupsAndFiles();
166 for (Group group : groupList) {
167 map.put(group.getGroupKey(), group.getResults());