20 package org.sleuthkit.autopsy.commonfilesearch;
22 import java.sql.SQLException;
23 import java.util.ArrayList;
24 import java.util.Collections;
25 import java.util.List;
28 import java.util.TreeMap;
29 import java.util.stream.Collectors;
30 import java.util.stream.Stream;
31 import org.openide.util.NbBundle;
44 final int frequencyPercentageThreshold;
49 this.frequencyPercentageThreshold = percentageThreshold;
74 abstract String getTabTitle();
77 "AbstractCommonFilesMetadataBuilder.buildCategorySelectionString.doc=Documents",
78 "AbstractCommonFilesMetadataBuilder.buildCategorySelectionString.media=Media",
79 "AbstractCommonFilesMetadataBuilder.buildCategorySelectionString.all=All File Categories"
82 String buildCategorySelectionString() {
83 if (!this.isFilterByDoc() && !this.isFilterByMedia()) {
84 return Bundle.AbstractCommonFilesMetadataBuilder_buildCategorySelectionString_all();
86 List<String> filters =
new ArrayList<>();
87 if (this.isFilterByDoc()) {
88 filters.add(Bundle.AbstractCommonFilesMetadataBuilder_buildCategorySelectionString_doc());
90 if (this.isFilterByMedia()) {
91 filters.add(Bundle.AbstractCommonFilesMetadataBuilder_buildCategorySelectionString_media());
93 return String.join(
", ", filters);
105 "# {0} - threshold percent",
106 "AbstractCommonFilesMetadataBuilder.getPercentFilter.thresholdPercent=, Threshold {0}%"})
107 String getPercentThresholdString() {
108 if (frequencyPercentageThreshold == 0) {
111 return Bundle.AbstractCommonFilesMetadataBuilder_getPercentFilter_thresholdPercent(frequencyPercentageThreshold);
115 static Map<Integer, CommonAttributeValueList> collateMatchesByNumberOfInstances(Map<String, CommonAttributeValue> commonFiles) {
117 Map<Integer, CommonAttributeValueList> instanceCollatedCommonFiles =
new TreeMap<>();
119 for (CommonAttributeValue md5Metadata : commonFiles.values()) {
120 Integer size = md5Metadata.getInstanceCount();
122 if (instanceCollatedCommonFiles.containsKey(size)) {
123 instanceCollatedCommonFiles.get(size).addMetadataToList(md5Metadata);
125 CommonAttributeValueList value =
new CommonAttributeValueList();
126 value.addMetadataToList(md5Metadata);
127 instanceCollatedCommonFiles.put(size, value);
130 return instanceCollatedCommonFiles;
140 static final Set<String> MEDIA_PICS_VIDEO_MIME_TYPES = Stream.of(
146 "image/vnd.adobe.photoshop",
161 "application/vnd.ms-asf",
162 "application/vnd.rn-realmedia",
163 "application/x-shockwave-flash"
164 ).collect(Collectors.toSet());
172 static final Set<String> TEXT_FILES_MIME_TYPES = Stream.of(
180 "application/javascript",
183 "application/x-msoffice",
184 "application/x-ooxml",
185 "application/msword",
186 "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
187 "application/vnd.ms-powerpoint",
188 "application/vnd.openxmlformats-officedocument.presentationml.presentation",
189 "application/vnd.ms-excel",
190 "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
191 "application/vnd.oasis.opendocument.presentation",
192 "application/vnd.oasis.opendocument.spreadsheet",
193 "application/vnd.oasis.opendocument.text"
194 ).collect(Collectors.toSet());
199 boolean isFilterByMedia() {
206 void setFilterByMedia(
boolean filterByMedia) {
213 boolean isFilterByDoc() {
220 void setFilterByDoc(
boolean filterByDoc) {
abstract CommonAttributeSearchResults findMatches()