From b3665a65dcaeaad3a71e56827f79ffedaeb39b74 Mon Sep 17 00:00:00 2001
From: Richard Cordovano <rcordovano@basistech.com>
Date: Fri, 27 May 2016 15:56:42 -0400
Subject: [PATCH] Add FileManager.findFilesByMimeType API

---
 .../casemodule/services/FileManager.java      | 48 +++++++++++++++++++
 1 file changed, 48 insertions(+)

diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/FileManager.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/FileManager.java
index 49530fc108..b840634420 100644
--- a/Core/src/org/sleuthkit/autopsy/casemodule/services/FileManager.java
+++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/FileManager.java
@@ -65,6 +65,54 @@ public FileManager(SleuthkitCase caseDb) {
         this.caseDb = caseDb;
     }
 
+    /**
+     * Finds all files with types that match one of a collection of MIME types.
+     *
+     * @param mimeTypes The MIME types.
+     *
+     * @return The files.
+     *
+     * @throws TskCoreException If there is a problem querying the case
+     *                          database.
+     */
+    public synchronized List<AbstractFile> findFilesByMimeType(Collection<String> mimeTypes) throws TskCoreException {
+        if (null == caseDb) {
+            throw new TskCoreException("File manager has been closed");
+        }
+        return caseDb.findAllFilesWhere(createFileTypeInCondition(mimeTypes));
+    }
+
+    /**
+     * Finds all files in a given data source (image, local/logical files set,
+     * etc.) with types that match one of a collection of MIME types.
+     *
+     * @param dataSource The data source.
+     * @param mimeTypes  The MIME types.
+     *
+     * @return The files.
+     *
+     * @throws TskCoreException If there is a problem querying the case
+     *                          database.
+     */
+    public synchronized List<AbstractFile> findFilesByMimeType(Content dataSource, Collection<String> mimeTypes) throws TskCoreException {
+        if (null == caseDb) {
+            throw new TskCoreException("File manager has been closed");
+        }
+        return caseDb.findAllFilesWhere("data_source_obj_id = " + dataSource.getId() + " AND " + createFileTypeInCondition(mimeTypes));
+    }
+
+    /**
+     * Converts a list of MIME types into an SQL "mime_type IN" condition.
+     *
+     * @param mimeTypes The MIIME types.
+     *
+     * @return The condition string.
+     */
+    private static String createFileTypeInCondition(Collection<String> mimeTypes) {
+        String types = StringUtils.join(mimeTypes, "', '");
+        return "mime_type IN ('" + types + "')";
+    }
+        
     /**
      * Finds all files and directories with a given file name. The name search
      * is for full or partial matches and is case insensitive (a case
-- 
GitLab