Autopsy  4.13.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
FileSearchData.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 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.filequery;
20 
21 import java.util.ArrayList;
22 import java.util.Arrays;
23 import java.util.Collection;
24 import java.util.Collections;
25 import java.util.List;
26 import org.openide.util.NbBundle;
28 
32 final class FileSearchData {
33 
34  private final static long BYTES_PER_MB = 1000000;
35 
39  @NbBundle.Messages({
40  "FileSearchData.Frequency.unique.displayName=Unique (1)",
41  "FileSearchData.Frequency.rare.displayName=Rare (2-10)",
42  "FileSearchData.Frequency.common.displayName=Common (11 - 100)",
43  "FileSearchData.Frequency.verycommon.displayName=Very Common (100+)",
44  "FileSearchData.Frequency.known.displayName=Known (NSRL)",
45  "FileSearchData.Frequency.unknown.displayName=Unknown",})
46  enum Frequency {
47  UNIQUE(0, 1, Bundle.FileSearchData_Frequency_unique_displayName()),
48  RARE(1, 10, Bundle.FileSearchData_Frequency_rare_displayName()),
49  COMMON(2, 100, Bundle.FileSearchData_Frequency_common_displayName()),
50  VERY_COMMON(3, 0, Bundle.FileSearchData_Frequency_common_displayName()),
51  KNOWN(4, 0, Bundle.FileSearchData_Frequency_known_displayName()),
52  UNKNOWN(5, 0, Bundle.FileSearchData_Frequency_unknown_displayName());
53 
54  private final int ranking;
55  private final String displayName;
56  private final int maxOccur;
57 
58  Frequency(int ranking, int maxOccur, String displayName) {
59  this.ranking = ranking;
60  this.maxOccur = maxOccur;
61  this.displayName = displayName;
62  }
63 
69  int getRanking() {
70  return ranking;
71  }
72 
80  static Frequency fromCount(long count) {
81  if (count <= UNIQUE.getMaxOccur()) {
82  return UNIQUE;
83  } else if (count <= RARE.getMaxOccur()) {
84  return RARE;
85  } else if (count <= COMMON.getMaxOccur()) {
86  return COMMON;
87  }
88  return VERY_COMMON;
89  }
90 
97  static List<Frequency> getOptionsForFilteringWithCr() {
98  return Arrays.asList(UNIQUE, RARE, COMMON, VERY_COMMON, KNOWN);
99  }
100 
107  static List<Frequency> getOptionsForFilteringWithoutCr() {
108  return Arrays.asList(KNOWN, UNKNOWN);
109  }
110 
111  @Override
112  public String toString() {
113  return displayName;
114  }
115 
119  int getMaxOccur() {
120  return maxOccur;
121  }
122  }
123 
127  @NbBundle.Messages({
128  "FileSearchData.FileSize.XXLARGE_IMAGE.displayName=XXLarge: 200MB+",
129  "FileSearchData.FileSize.XLARGE_IMAGE.displayName=XLarge: 50-200MB",
130  "FileSearchData.FileSize.LARGE_IMAGE.displayName=Large: 1-50MB",
131  "FileSearchData.FileSize.MEDIUM_IMAGE.displayName=Medium: 100KB-1MB",
132  "FileSearchData.FileSize.SMALL_IMAGE.displayName=Small: 16-100KB",
133  "FileSearchData.FileSize.XSMALL_IMAGE.displayName=XSmall: 0-16KB",
134  "FileSearchData.FileSize.XXLARGE_VIDEO.displayName=XXLarge: 10GB+",
135  "FileSearchData.FileSize.XLARGE_VIDEO.displayName=XLarge: 5-10GB",
136  "FileSearchData.FileSize.LARGE_VIDEO.displayName=Large: 1-5GB",
137  "FileSearchData.FileSize.MEDIUM_VIDEO.displayName=Medium: 100MB-1GB",
138  "FileSearchData.FileSize.SMALL_VIDEO.displayName=Small: 500KB-100MB",
139  "FileSearchData.FileSize.XSMALL_VIDEO.displayName=XSmall: 0-500KB",})
140  enum FileSize {
141  XXLARGE_VIDEO(0, 10000 * BYTES_PER_MB, -1, Bundle.FileSearchData_FileSize_XXLARGE_VIDEO_displayName()),
142  XLARGE_VIDEO(1, 5000 * BYTES_PER_MB, 10000 * BYTES_PER_MB, Bundle.FileSearchData_FileSize_XLARGE_VIDEO_displayName()),
143  LARGE_VIDEO(2, 1000 * BYTES_PER_MB, 5000 * BYTES_PER_MB, Bundle.FileSearchData_FileSize_LARGE_VIDEO_displayName()),
144  MEDIUM_VIDEO(3, 100 * BYTES_PER_MB, 1000 * BYTES_PER_MB, Bundle.FileSearchData_FileSize_MEDIUM_VIDEO_displayName()),
145  SMALL_VIDEO(4, 500000, 100 * BYTES_PER_MB, Bundle.FileSearchData_FileSize_SMALL_VIDEO_displayName()),
146  XSMALL_VIDEO(5, 0, 500000, Bundle.FileSearchData_FileSize_XSMALL_VIDEO_displayName()),
147  XXLARGE_IMAGE(6, 200 * BYTES_PER_MB, -1, Bundle.FileSearchData_FileSize_XXLARGE_IMAGE_displayName()),
148  XLARGE_IMAGE(7, 50 * BYTES_PER_MB, 200 * BYTES_PER_MB, Bundle.FileSearchData_FileSize_XLARGE_IMAGE_displayName()),
149  LARGE_IMAGE(8, 1 * BYTES_PER_MB, 50 * BYTES_PER_MB, Bundle.FileSearchData_FileSize_LARGE_IMAGE_displayName()),
150  MEDIUM_IMAGE(9, 100000, 1 * BYTES_PER_MB, Bundle.FileSearchData_FileSize_MEDIUM_IMAGE_displayName()),
151  SMALL_IMAGE(10, 16000, 100000, Bundle.FileSearchData_FileSize_SMALL_IMAGE_displayName()),
152  XSMALL_IMAGE(11, 0, 16000, Bundle.FileSearchData_FileSize_XSMALL_IMAGE_displayName());
153 
154  private final int ranking; // Must be unique for each value
155  private final long minBytes; // Note that the size must be strictly greater than this to match
156  private final long maxBytes;
157  private final String displayName;
158  final static long NO_MAXIMUM = -1;
159 
160  FileSize(int ranking, long minB, long maxB, String displayName) {
161  this.ranking = ranking;
162  this.minBytes = minB;
163  if (maxB >= 0) {
164  this.maxBytes = maxB;
165  } else {
166  this.maxBytes = NO_MAXIMUM;
167  }
168  this.displayName = displayName;
169  }
170 
179  static FileSize fromImageSize(long size) {
180  if (size > XXLARGE_IMAGE.getMinBytes()) {
181  return XXLARGE_IMAGE;
182  } else if (size > XLARGE_IMAGE.getMinBytes()) {
183  return XLARGE_IMAGE;
184  } else if (size > LARGE_IMAGE.getMinBytes()) {
185  return LARGE_IMAGE;
186  } else if (size > MEDIUM_IMAGE.getMinBytes()) {
187  return MEDIUM_IMAGE;
188  } else if (size > SMALL_IMAGE.getMinBytes()) {
189  return SMALL_IMAGE;
190  } else {
191  return XSMALL_IMAGE;
192  }
193  }
194 
203  static FileSize fromVideoSize(long size) {
204  if (size > XXLARGE_VIDEO.getMinBytes()) {
205  return XXLARGE_VIDEO;
206  } else if (size > XLARGE_VIDEO.getMinBytes()) {
207  return XLARGE_VIDEO;
208  } else if (size > LARGE_VIDEO.getMinBytes()) {
209  return LARGE_VIDEO;
210  } else if (size > MEDIUM_VIDEO.getMinBytes()) {
211  return MEDIUM_VIDEO;
212  } else if (size > SMALL_VIDEO.getMinBytes()) {
213  return SMALL_VIDEO;
214  } else {
215  return XSMALL_VIDEO;
216  }
217  }
218 
224  long getMaxBytes() {
225  return maxBytes;
226  }
227 
233  long getMinBytes() {
234  return minBytes;
235  }
236 
242  int getRanking() {
243  return ranking;
244  }
245 
246  @Override
247  public String toString() {
248  return displayName;
249  }
250 
256  static List<FileSize> getOptionsForImages() {
257  return Arrays.asList(XXLARGE_IMAGE, XLARGE_IMAGE, LARGE_IMAGE, MEDIUM_IMAGE, SMALL_IMAGE, XSMALL_IMAGE);
258  }
259 
265  static List<FileSize> getOptionsForVideos() {
266  return Arrays.asList(XXLARGE_VIDEO, XLARGE_VIDEO, LARGE_VIDEO, MEDIUM_VIDEO, SMALL_VIDEO, XSMALL_VIDEO);
267  }
268  }
269 
276  @NbBundle.Messages({
277  "FileSearchData.FileType.Audio.displayName=Audio",
278  "FileSearchData.FileType.Video.displayName=Video",
279  "FileSearchData.FileType.Image.displayName=Image",
280  "FileSearchData.FileType.Documents.displayName=Documents",
281  "FileSearchData.FileType.Executables.displayName=Executables",
282  "FileSearchData.FileType.Other.displayName=Other/Unknown"})
283  enum FileType {
284 
285  IMAGE(0, Bundle.FileSearchData_FileType_Image_displayName(), FileTypeUtils.FileTypeCategory.IMAGE.getMediaTypes()),
286  AUDIO(1, Bundle.FileSearchData_FileType_Audio_displayName(), FileTypeUtils.FileTypeCategory.AUDIO.getMediaTypes()),
287  VIDEO(2, Bundle.FileSearchData_FileType_Video_displayName(), FileTypeUtils.FileTypeCategory.VIDEO.getMediaTypes()),
288  EXECUTABLE(3, Bundle.FileSearchData_FileType_Executables_displayName(), FileTypeUtils.FileTypeCategory.EXECUTABLE.getMediaTypes()),
289  DOCUMENTS(4, Bundle.FileSearchData_FileType_Documents_displayName(), FileTypeUtils.FileTypeCategory.DOCUMENTS.getMediaTypes()),
290  OTHER(5, Bundle.FileSearchData_FileType_Other_displayName(), new ArrayList<>());
291 
292  private final int ranking; // For ordering in the UI
293  private final String displayName;
294  private final Collection<String> mediaTypes;
295 
296  FileType(int value, String displayName, Collection<String> mediaTypes) {
297  this.ranking = value;
298  this.displayName = displayName;
299  this.mediaTypes = mediaTypes;
300  }
301 
307  Collection<String> getMediaTypes() {
308  return Collections.unmodifiableCollection(mediaTypes);
309  }
310 
311  @Override
312  public String toString() {
313  return displayName;
314  }
315 
321  int getRanking() {
322  return ranking;
323  }
324 
332  static FileType fromMIMEtype(String mimeType) {
333  for (FileType type : FileType.values()) {
334  if (type.getMediaTypes().contains(mimeType)) {
335  return type;
336  }
337  }
338  return OTHER;
339  }
340 
346  static List<FileType> getOptionsForFiltering() {
347  return Arrays.asList(IMAGE, VIDEO);
348  }
349  }
350 
354  @NbBundle.Messages({
355  "FileSearchData.Score.notable.displayName=Notable",
356  "FileSearchData.Score.interesting.displayName=Interesting",
357  "FileSearchData.Score.unknown.displayName=Unknown",})
358  enum Score {
359  NOTABLE(0, Bundle.FileSearchData_Score_notable_displayName()),
360  INTERESTING(1, Bundle.FileSearchData_Score_interesting_displayName()),
361  UNKNOWN(2, Bundle.FileSearchData_Score_unknown_displayName());
362 
363  private final int ranking;
364  private final String displayName;
365 
366  Score(int ranking, String displayName) {
367  this.ranking = ranking;
368  this.displayName = displayName;
369  }
370 
376  int getRanking() {
377  return ranking;
378  }
379 
385  static List<Score> getOptionsForFiltering() {
386  return Arrays.asList(NOTABLE, INTERESTING);
387  }
388 
389  @Override
390  public String toString() {
391  return displayName;
392  }
393  }
394 
395  private FileSearchData() {
396  // Class should not be instantiated
397  }
398 }

Copyright © 2012-2019 Basis Technology. Generated on: Tue Jan 7 2020
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.