diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/AbstractDAO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/AbstractDAO.java index 91fa55fd19..8630974377 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/AbstractDAO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/AbstractDAO.java @@ -18,8 +18,6 @@ */ package org.sleuthkit.autopsy.mainui.datamodel; -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent; import java.beans.PropertyChangeEvent; import java.util.Set; @@ -31,13 +29,9 @@ import org.sleuthkit.autopsy.mainui.datamodel.events.TreeEvent; */ abstract class AbstractDAO { - private static final int CACHE_ENTRIES_PER_SUBTYPE = 5; // rule of thumb: 5 entries times number of cached SearchParams sub-types - private static final long CACHE_DURATION = 2; - private static final TimeUnit CACHE_DURATION_UNITS = TimeUnit.MINUTES; - - static final Cache createCache(int subtypeCount) { - return CacheBuilder.newBuilder().maximumSize(2).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build(); - } + static final int CACHE_SIZE = 5; + static final long CACHE_DURATION = 5; + static final TimeUnit CACHE_DURATION_UNITS = TimeUnit.MINUTES; /** * Clear any cached data (Due to change in view). diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/AnalysisResultDAO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/AnalysisResultDAO.java index 68ed860191..1da2f9aee6 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/AnalysisResultDAO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/AnalysisResultDAO.java @@ -22,6 +22,7 @@ import org.sleuthkit.autopsy.mainui.datamodel.events.AnalysisResultSetEvent; import org.sleuthkit.autopsy.mainui.datamodel.events.AnalysisResultEvent; import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent; import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; import java.beans.PropertyChangeEvent; import java.sql.SQLException; import java.text.MessageFormat; @@ -150,10 +151,9 @@ public class AnalysisResultDAO extends BlackboardArtifactDAO { BlackboardArtifact.Type.TSK_HASHSET_HIT.getTypeID() ); - private static final int SEARCH_SUBTYPE_COUNT = 3; // BlackboardArtifactSearchParam, AnalysisResultSetSearchParam, KeywordHitSearchParam - private final Cache, AnalysisResultTableSearchResultsDTO> analysisResultCache = createCache(SEARCH_SUBTYPE_COUNT); - private final Cache, AnalysisResultTableSearchResultsDTO> setHitCache = createCache(SEARCH_SUBTYPE_COUNT); - private final Cache, AnalysisResultTableSearchResultsDTO> keywordHitCache = createCache(SEARCH_SUBTYPE_COUNT); + private final Cache, AnalysisResultTableSearchResultsDTO> analysisResultCache = CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build(); + private final Cache, AnalysisResultTableSearchResultsDTO> setHitCache = CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build(); + private final Cache, AnalysisResultTableSearchResultsDTO> keywordHitCache = CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build(); private final TreeCounts treeCounts = new TreeCounts<>(); diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/CommAccountsDAO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/CommAccountsDAO.java index c456d533d9..27090aec98 100755 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/CommAccountsDAO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/CommAccountsDAO.java @@ -19,6 +19,7 @@ package org.sleuthkit.autopsy.mainui.datamodel; import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; import java.beans.PropertyChangeEvent; import java.sql.SQLException; import java.util.ArrayList; @@ -41,6 +42,9 @@ import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.ingest.ModuleDataEvent; +import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION; +import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION_UNITS; +import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_SIZE; import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeDisplayCount; import org.sleuthkit.autopsy.mainui.datamodel.events.CommAccountsEvent; import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent; @@ -63,8 +67,8 @@ import org.sleuthkit.datamodel.TskCoreException; public class CommAccountsDAO extends AbstractDAO { private static final Logger logger = Logger.getLogger(CommAccountsDAO.class.getName()); - private static final int CACHE_SIZE = Account.Type.PREDEFINED_ACCOUNT_TYPES.size(); // number of cached SearchParams sub-types - private final Cache, SearchResultsDTO> searchParamsCache = createCache(CACHE_SIZE); + private final Cache, SearchResultsDTO> searchParamsCache = + CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build(); private final TreeCounts accountCounts = new TreeCounts<>(); private static CommAccountsDAO instance = null; diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/DataArtifactDAO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/DataArtifactDAO.java index 6221bb3503..5541bb4dfb 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/DataArtifactDAO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/DataArtifactDAO.java @@ -22,6 +22,7 @@ import org.sleuthkit.autopsy.mainui.datamodel.events.DataArtifactEvent; import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent; import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEventUtils; import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; import java.beans.PropertyChangeEvent; import java.text.MessageFormat; import java.util.ArrayList; @@ -42,6 +43,9 @@ import org.apache.commons.lang3.tuple.Pair; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import org.sleuthkit.autopsy.ingest.ModuleDataEvent; +import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION; +import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION_UNITS; +import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_SIZE; import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeDisplayCount; import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeItemDTO; import org.sleuthkit.autopsy.mainui.datamodel.events.TreeEvent; @@ -81,7 +85,8 @@ public class DataArtifactDAO extends BlackboardArtifactDAO { return BlackboardArtifactDAO.getIgnoredTreeTypes(); } - private final Cache, DataArtifactTableSearchResultsDTO> dataArtifactCache = createCache(BlackboardArtifact.ARTIFACT_TYPE.values().length); + private final Cache, DataArtifactTableSearchResultsDTO> dataArtifactCache = + CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build(); private final TreeCounts treeCounts = new TreeCounts<>(); private DataArtifactTableSearchResultsDTO fetchDataArtifactsForTable(SearchParams cacheKey) throws NoCurrentCaseException, TskCoreException { @@ -110,7 +115,7 @@ public class DataArtifactDAO extends BlackboardArtifactDAO { return new DataArtifactRowDTO((DataArtifact) artifact, srcContent, linkedFile, isTimelineSupported, cellValues, id); } - public SearchResultsDTO getDataArtifactsForTable(DataArtifactSearchParam artifactKey, long startItem, Long maxCount) throws ExecutionException, IllegalArgumentException { + public DataArtifactTableSearchResultsDTO getDataArtifactsForTable(DataArtifactSearchParam artifactKey, long startItem, Long maxCount) throws ExecutionException, IllegalArgumentException { BlackboardArtifact.Type artType = artifactKey.getArtifactType(); if (artType == null || artType.getCategory() != BlackboardArtifact.Category.DATA_ARTIFACT diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/EmailsDAO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/EmailsDAO.java index 29898bd550..85dcca66a7 100755 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/EmailsDAO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/EmailsDAO.java @@ -19,6 +19,7 @@ package org.sleuthkit.autopsy.mainui.datamodel; import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; import java.beans.PropertyChangeEvent; import java.sql.ResultSet; import java.sql.SQLException; @@ -44,6 +45,9 @@ import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.ingest.ModuleDataEvent; +import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION; +import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION_UNITS; +import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_SIZE; import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeDisplayCount; import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeItemDTO; import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent; @@ -67,12 +71,12 @@ import org.sleuthkit.datamodel.TskData; public class EmailsDAO extends AbstractDAO { private static final Logger logger = Logger.getLogger(EmailsDAO.class.getName()); - private static final int CACHE_SIZE = 15; private static final String PATH_DELIMITER = "/"; private static final String ESCAPE_CHAR = "\\"; - private final Cache, SearchResultsDTO> searchParamsCache = createCache(CACHE_SIZE); + private final Cache, SearchResultsDTO> searchParamsCache = + CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build(); private final TreeCounts emailCounts = new TreeCounts<>(); diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/FileSystemDAO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/FileSystemDAO.java index 7d625bd908..9a8029aabf 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/FileSystemDAO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/FileSystemDAO.java @@ -19,6 +19,7 @@ package org.sleuthkit.autopsy.mainui.datamodel; import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; import com.google.common.collect.ImmutableSet; import java.beans.PropertyChangeEvent; import java.util.ArrayList; @@ -42,6 +43,9 @@ import org.sleuthkit.autopsy.casemodule.events.HostsAddedToPersonEvent; import org.sleuthkit.autopsy.casemodule.events.HostsRemovedFromPersonEvent; import org.sleuthkit.autopsy.casemodule.events.HostsUpdatedEvent; import org.sleuthkit.autopsy.coreutils.Logger; +import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION; +import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION_UNITS; +import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_SIZE; import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent; import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEventUtils; import static org.sleuthkit.autopsy.mainui.datamodel.MediaTypeUtils.getExtensionMediaType; @@ -90,8 +94,6 @@ public class FileSystemDAO extends AbstractDAO { private static final Logger logger = Logger.getLogger(FileSystemDAO.class.getName()); - private static final int CACHE_SIZE = 15; // rule of thumb: 5 entries times number of cached SearchParams sub-types - private static final Set HOST_LEVEL_EVTS = ImmutableSet.of( Case.Events.DATA_SOURCE_ADDED.toString(), // this should trigger the case to be reopened @@ -107,7 +109,8 @@ public class FileSystemDAO extends AbstractDAO { Case.Events.HOSTS_REMOVED_FROM_PERSON.toString() ); - private final Cache, BaseSearchResultsDTO> searchParamsCache = createCache(CACHE_SIZE); + private final Cache, BaseSearchResultsDTO> searchParamsCache = + CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build(); private final TreeCounts treeCounts = new TreeCounts<>(); diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/OsAccountsDAO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/OsAccountsDAO.java index cee0f8ec5d..51db3dd872 100755 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/OsAccountsDAO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/OsAccountsDAO.java @@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.mainui.datamodel; import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent; import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; import java.beans.PropertyChangeEvent; import java.util.ArrayList; import java.util.Arrays; @@ -37,6 +38,9 @@ import org.python.google.common.collect.ImmutableSet; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import org.sleuthkit.autopsy.coreutils.TimeZoneUtils; +import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION; +import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION_UNITS; +import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_SIZE; import org.sleuthkit.autopsy.mainui.datamodel.events.OsAccountEvent; import org.sleuthkit.autopsy.mainui.datamodel.ContentRowDTO.OsAccountRowDTO; import org.sleuthkit.autopsy.mainui.datamodel.events.TreeEvent; @@ -61,8 +65,8 @@ import org.sleuthkit.datamodel.TskCoreException; "OsAccountsDAO.fileColumns.noDescription=No Description",}) public class OsAccountsDAO extends AbstractDAO { - private static final int SEARCH_SUBTYPE_COUNT = 1; - private final Cache, SearchResultsDTO> searchParamsCache = createCache(SEARCH_SUBTYPE_COUNT); + private final Cache, SearchResultsDTO> searchParamsCache = + CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build(); private static final String OS_ACCOUNTS_TYPE_ID = "OS_ACCOUNTS"; diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/TagsDAO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/TagsDAO.java index c3dd6cd739..3ab3482bb3 100755 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/TagsDAO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/TagsDAO.java @@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.mainui.datamodel; import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent; import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; import java.beans.PropertyChangeEvent; import java.util.ArrayList; import java.util.Arrays; @@ -43,6 +44,9 @@ import org.sleuthkit.autopsy.casemodule.events.ContentTagAddedEvent; import org.sleuthkit.autopsy.casemodule.events.ContentTagDeletedEvent; import org.sleuthkit.autopsy.core.UserPreferences; import org.sleuthkit.autopsy.coreutils.TimeZoneUtils; +import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION; +import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION_UNITS; +import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_SIZE; import org.sleuthkit.autopsy.mainui.datamodel.TagsSearchParams.TagType; import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeItemDTO; import org.sleuthkit.autopsy.mainui.datamodel.events.TagsEvent; @@ -81,8 +85,6 @@ import org.sleuthkit.datamodel.TskCoreException; "TagsDAO.tagColumns.userNameColLbl=User Name"}) public class TagsDAO extends AbstractDAO { - private static final int CACHE_SIZE = 5; // rule of thumb: 5 entries times number of cached SearchParams sub-types - private static final String USER_NAME_PROPERTY = "user.name"; //NON-NLS private static final List FILE_TAG_COLUMNS = Arrays.asList( @@ -120,7 +122,8 @@ public class TagsDAO extends AbstractDAO { return new ColumnKey(name, name, Bundle.TagsDAO_fileColumns_noDescription()); } - private final Cache, SearchResultsDTO> searchParamsCache = createCache(CACHE_SIZE); + private final Cache, SearchResultsDTO> searchParamsCache = + CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build(); private final TreeCounts treeCounts = new TreeCounts<>(); public SearchResultsDTO getTags(TagsSearchParams key, long startItem, Long maxCount) throws ExecutionException, IllegalArgumentException { diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/ViewsDAO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/ViewsDAO.java index 8231ffc962..a1eaaa2e80 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/ViewsDAO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/ViewsDAO.java @@ -20,6 +20,7 @@ package org.sleuthkit.autopsy.mainui.datamodel; import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEvent; import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; import com.google.common.collect.ImmutableSet; import java.beans.PropertyChangeEvent; import java.sql.SQLException; @@ -48,6 +49,9 @@ import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException; import static org.sleuthkit.autopsy.core.UserPreferences.hideKnownFilesInViewsTree; import static org.sleuthkit.autopsy.core.UserPreferences.hideSlackFilesInViewsTree; +import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION; +import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_DURATION_UNITS; +import static org.sleuthkit.autopsy.mainui.datamodel.AbstractDAO.CACHE_SIZE; import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeDisplayCount; import org.sleuthkit.autopsy.mainui.datamodel.TreeResultsDTO.TreeItemDTO; import org.sleuthkit.autopsy.mainui.datamodel.events.DAOEventUtils; @@ -77,8 +81,6 @@ public class ViewsDAO extends AbstractDAO { private static final Logger logger = Logger.getLogger(ViewsDAO.class.getName()); - private static final int CACHE_SIZE = 15; // rule of thumb: 5 entries times number of cached SearchParams sub-types - private static final Map> EXTENSION_FILTER_MAP = Stream.of((FileExtSearchFilter[]) FileExtRootFilter.values(), FileExtDocumentFilter.values(), FileExtExecutableFilter.values()) .flatMap(arr -> Stream.of(arr)) @@ -100,7 +102,8 @@ public class ViewsDAO extends AbstractDAO { return instance; } - private final Cache, SearchResultsDTO> searchParamsCache = createCache(1); + private final Cache, SearchResultsDTO> searchParamsCache = + CacheBuilder.newBuilder().maximumSize(CACHE_SIZE).expireAfterAccess(CACHE_DURATION, CACHE_DURATION_UNITS).build(); private final TreeCounts treeCounts = new TreeCounts<>(); private SleuthkitCase getCase() throws NoCurrentCaseException { diff --git a/Core/test/qa-functional/src/org/sleuthkit/autopsy/mainui/datamodel/TableSearchTest.java b/Core/test/qa-functional/src/org/sleuthkit/autopsy/mainui/datamodel/TableSearchTest.java index 3efc8e0227..fd6a7b75fe 100644 --- a/Core/test/qa-functional/src/org/sleuthkit/autopsy/mainui/datamodel/TableSearchTest.java +++ b/Core/test/qa-functional/src/org/sleuthkit/autopsy/mainui/datamodel/TableSearchTest.java @@ -520,13 +520,13 @@ public class TableSearchTest extends NbTestCase { accountMgr.newOsAccountInstance(osAccount1, dataSource2, OsAccountInstance.OsAccountInstanceType.LAUNCHED); // Add communication accounts - openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.EMAIL, EMAIL_A, "Test Module", fileA1); - openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.EMAIL, EMAIL_B, "Test Module", fileA2); - openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.DEVICE, "devId1", "Test Module", fileA2); - openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.PHONE, PHONENUM_1, "Test Module", fileA2); + openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.EMAIL, EMAIL_A, "Test Module", fileA1, null); + openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.EMAIL, EMAIL_B, "Test Module", fileA2, null); + openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.DEVICE, "devId1", "Test Module", fileA2, null); + openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.PHONE, PHONENUM_1, "Test Module", fileA2, null); - openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.EMAIL, EMAIL_C, "Test Module", customFile); - openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.PHONE, PHONENUM_2, "Test Module", customFile); + openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.EMAIL, EMAIL_C, "Test Module", customFile, null); + openCase.getSleuthkitCase().getCommunicationsManager().createAccountFileInstance(Account.Type.PHONE, PHONENUM_2, "Test Module", customFile, null); } catch (TestUtilsException | TskCoreException | BlackboardException | TagsManager.TagNameAlreadyExistsException | OsAccountManager.NotUserSIDException ex) { if (trans != null) {