From f746f455c85f23d9aa7d7b5d4b4253ed6ec16f99 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Fri, 27 May 2016 12:53:10 -0400 Subject: [PATCH] Complete docs/deprecation for FileManager API --- .../sleuthkit/autopsy/casemodule/Case.java | 2 + .../casemodule/services/Blackboard.java | 7 +- .../casemodule/services/FileManager.java | 211 ++++++++---------- .../autopsy/casemodule/services/Services.java | 78 ++++--- .../casemodule/services/TagsManager.java | 56 ++--- .../KeywordSearchService.java | 8 +- 6 files changed, 178 insertions(+), 184 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index 7677b5be68..ecd67d2052 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -282,6 +282,7 @@ public class Case implements SleuthkitCase.ErrorObserver { /** * Constructor for the Case class */ + @SuppressWarnings("deprecation") private Case(CaseMetadata caseMetadata, SleuthkitCase db) { this.caseMetadata = caseMetadata; this.db = db; @@ -835,6 +836,7 @@ public class Case implements SleuthkitCase.ErrorObserver { /** * Closes this case. This methods close the xml and clear all the fields. */ + @SuppressWarnings("deprecation") public void closeCase() throws CaseActionException { changeCase(null); try { diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/Blackboard.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/Blackboard.java index d5064e3b4e..1f2f4b252b 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/Blackboard.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/Blackboard.java @@ -109,10 +109,13 @@ public final class Blackboard implements Closeable { } /** - * Cloese this blackboard and releases any resources associated with it. - * @throws IOException + * Closes the blackboard. + * + * @throws IOException If there is a problem closing the blackboard. + * @deprecated File manager clients should not close the blackboard. */ @Override + @Deprecated public void close() throws IOException { } diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/FileManager.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/FileManager.java index 336e97742b..5bf85602d4 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/FileManager.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/FileManager.java @@ -26,10 +26,8 @@ import java.io.Closeable; import java.io.IOException; import java.util.ArrayList; import java.util.List; -import java.util.logging.Level; import org.openide.util.NbBundle; import org.sleuthkit.autopsy.casemodule.Case; -import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.datamodel.VirtualDirectoryNode; import org.sleuthkit.autopsy.ingest.IngestServices; import org.sleuthkit.autopsy.ingest.ModuleContentEvent; @@ -37,7 +35,6 @@ import org.sleuthkit.datamodel.AbstractFile; import org.sleuthkit.datamodel.Content; import org.sleuthkit.datamodel.DerivedFile; import org.sleuthkit.datamodel.LayoutFile; -import org.sleuthkit.datamodel.LocalFile; import org.sleuthkit.datamodel.SleuthkitCase; import org.sleuthkit.datamodel.SleuthkitCase.CaseDbTransaction; import org.sleuthkit.datamodel.TskCoreException; @@ -48,55 +45,19 @@ import org.sleuthkit.datamodel.LocalFilesDataSource; import org.sleuthkit.datamodel.TskDataException; /** - * A case-level service that provides methods for retrieving files associated - * with the case and for adding local files, carved files, and derived files to - * the case. + * A manager that provides methods for retrieving files from the current case + * and for adding local files, carved files, and derived files to the current + * case. */ public class FileManager implements Closeable { - private static final Logger logger = Logger.getLogger(FileManager.class.getName()); - private SleuthkitCase caseDb; - - /* - * TODO (AUT-1905): Although this counter is guarded by the monitor of the - * FileManager, this does not guarantee unique default file set names for - * multi-user cases where multiple nodes can be running FileManagers for the - * same case. - */ - private int localFileDataSourcesCounter; - /** - * Constructs a case-level service that provides methods for retrieving - * files associated with the case and for adding local files, carved files, - * and derived files to the case. + * Constructs a manager that provides methods for retrieving files from the + * current case and for adding local files, carved files, and derived files + * to the current case. + * */ - FileManager(Case currentCase, SleuthkitCase caseDb) throws TskCoreException { - this.caseDb = caseDb; - initializeLocalFileDataSourcesCounter(); - } - - /** - * Initialize the counter for the number of logical/local file sets that is - * used to generate the default logical/local file data source names. - */ - private void initializeLocalFileDataSourcesCounter() { - /* - * TODO (AUT-1905): Although the counter is guarded by the monitor of - * the FileManager, this does not guarantee unique default file set - * names for multi-user cases where multiple nodes can be running - * FileManagers for the same case. - */ - localFileDataSourcesCounter = 0; - try { - List localFileDataSources = caseDb.getVirtualDirectoryRoots(); - for (VirtualDirectory vd : localFileDataSources) { - if (vd.getName().startsWith(VirtualDirectoryNode.LOGICAL_FILE_SET_PREFIX)) { - ++localFileDataSourcesCounter; - } - } - } catch (TskCoreException ex) { - logger.log(Level.SEVERE, "Error initializing logical files counter", ex); //NON-NLS - } + FileManager() { } /** @@ -111,12 +72,9 @@ public class FileManager implements Closeable { * @throws TskCoreException if there is a problem querying the case * database. */ - public synchronized List findFiles(String fileName) throws TskCoreException { - if (null == caseDb) { - throw new TskCoreException("FileManager closed"); - } + public List findFiles(String fileName) throws TskCoreException { List result = new ArrayList<>(); - List dataSources = caseDb.getRootObjects(); + List dataSources = Case.getCurrentCase().getSleuthkitCase().getRootObjects(); for (Content dataSource : dataSources) { result.addAll(findFiles(dataSource, fileName)); } @@ -137,12 +95,9 @@ public class FileManager implements Closeable { * @throws TskCoreException if there is a problem querying the case * database. */ - public synchronized List findFiles(String fileName, String parentName) throws TskCoreException { - if (null == caseDb) { - throw new TskCoreException("FileManager closed"); - } + public List findFiles(String fileName, String parentName) throws TskCoreException { List result = new ArrayList<>(); - List dataSources = caseDb.getRootObjects(); + List dataSources = Case.getCurrentCase().getSleuthkitCase().getRootObjects(); for (Content dataSource : dataSources) { result.addAll(findFiles(dataSource, fileName, parentName)); } @@ -163,12 +118,9 @@ public class FileManager implements Closeable { * @throws TskCoreException if there is a problem querying the case * database. */ - public synchronized List findFiles(String fileName, AbstractFile parent) throws TskCoreException { - if (null == caseDb) { - throw new TskCoreException("FileManager closed"); - } + public List findFiles(String fileName, AbstractFile parent) throws TskCoreException { List result = new ArrayList<>(); - List dataSources = caseDb.getRootObjects(); + List dataSources = Case.getCurrentCase().getSleuthkitCase().getRootObjects(); for (Content dataSource : dataSources) { result.addAll(findFiles(dataSource, fileName, parent)); } @@ -189,8 +141,8 @@ public class FileManager implements Closeable { * @throws TskCoreException if there is a problem querying the case * database. */ - public synchronized List findFiles(Content dataSource, String fileName) throws TskCoreException { - return caseDb.findFiles(dataSource, fileName); + public List findFiles(Content dataSource, String fileName) throws TskCoreException { + return Case.getCurrentCase().getSleuthkitCase().findFiles(dataSource, fileName); } /** @@ -209,8 +161,8 @@ public class FileManager implements Closeable { * @throws TskCoreException if there is a problem querying the case * database. */ - public synchronized List findFiles(Content dataSource, String fileName, String parentName) throws TskCoreException { - return caseDb.findFiles(dataSource, fileName, parentName); + public List findFiles(Content dataSource, String fileName, String parentName) throws TskCoreException { + return Case.getCurrentCase().getSleuthkitCase().findFiles(dataSource, fileName, parentName); } /** @@ -229,7 +181,7 @@ public class FileManager implements Closeable { * @throws TskCoreException if there is a problem querying the case * database. */ - public synchronized List findFiles(Content dataSource, String fileName, AbstractFile parent) throws TskCoreException { + public List findFiles(Content dataSource, String fileName, AbstractFile parent) throws TskCoreException { return findFiles(dataSource, fileName, parent.getName()); } @@ -258,11 +210,8 @@ public class FileManager implements Closeable { * @throws TskCoreException if there is a problem querying the case * database. */ - public synchronized List openFiles(Content dataSource, String filePath) throws TskCoreException { - if (null == caseDb) { - throw new TskCoreException("FileManager closed"); - } - return caseDb.openFiles(dataSource, filePath); + public List openFiles(Content dataSource, String filePath) throws TskCoreException { + return Case.getCurrentCase().getSleuthkitCase().openFiles(dataSource, filePath); } /** @@ -293,14 +242,15 @@ public class FileManager implements Closeable { * @throws TskCoreException if there is a problem adding the file to the * case database. */ - public synchronized DerivedFile addDerivedFile(String fileName, + public DerivedFile addDerivedFile(String fileName, String localPath, long size, long ctime, long crtime, long atime, long mtime, boolean isFile, AbstractFile parentFile, String rederiveDetails, String toolName, String toolVersion, String otherDetails) throws TskCoreException { - return caseDb.addDerivedFile(fileName, localPath, size, + + return Case.getCurrentCase().getSleuthkitCase().addDerivedFile(fileName, localPath, size, ctime, crtime, atime, mtime, isFile, parentFile, rederiveDetails, toolName, toolVersion, otherDetails); } @@ -322,7 +272,7 @@ public class FileManager implements Closeable { * case database. */ public synchronized LayoutFile addCarvedFile(String fileName, long fileSize, long parentObjId, List layout) throws TskCoreException { - return caseDb.addCarvedFile(fileName, fileSize, parentObjId, layout); + return Case.getCurrentCase().getSleuthkitCase().addCarvedFile(fileName, fileSize, parentObjId, layout); } /** @@ -338,7 +288,7 @@ public class FileManager implements Closeable { * case database. */ public List addCarvedFiles(List filesToAdd) throws TskCoreException { - return caseDb.addCarvedFiles(filesToAdd); + return Case.getCurrentCase().getSleuthkitCase().addCarvedFiles(filesToAdd); } /** @@ -352,7 +302,7 @@ public class FileManager implements Closeable { * * @param An AbstractFile represeting the added file or directory. */ - public void fileAdded(AbstractFile newFile); + void fileAdded(AbstractFile newFile); } /** @@ -384,27 +334,19 @@ public class FileManager implements Closeable { * directory that does not exist or cannot be read. */ public synchronized LocalFilesDataSource addLocalFilesDataSource(String deviceId, String rootVirtualDirectoryName, String timeZone, List localFilePaths, FileAddProgressUpdater progressUpdater) throws TskCoreException, TskDataException { - /* - * Convert the local/logical file paths into File objects. - */ List localFiles = getFilesAndDirectories(localFilePaths); CaseDbTransaction trans = null; try { - /* - * Generate a name for the root virtual directory for the data - * source, if a name was not supplied, and increment the counter - * used to generate the default names. - */ - int newLocalFilesSetCount = localFileDataSourcesCounter + 1; String rootDirectoryName = rootVirtualDirectoryName; - if (rootVirtualDirectoryName.isEmpty()) { - rootDirectoryName = VirtualDirectoryNode.LOGICAL_FILE_SET_PREFIX + newLocalFilesSetCount; + if (rootDirectoryName.isEmpty()) { + rootDirectoryName = generateFilesDataSourceName(); } /* * Add the root virtual directory and its local/logical file - * chioldren to the case database. + * children to the case database. */ + SleuthkitCase caseDb = Case.getCurrentCase().getSleuthkitCase(); trans = caseDb.beginTransaction(); LocalFilesDataSource dataSource = caseDb.addLocalFilesDataSource(deviceId, rootDirectoryName, timeZone, trans); VirtualDirectory rootDirectory = dataSource.getRootDirectory(); @@ -419,18 +361,6 @@ public class FileManager implements Closeable { } trans.commit(); - /* - * Update the counter used to generate the default names. - * - * TODO (AUT-1905): Although the counter is guarded by the monitor - * of the FileManager, this does not guarantee unique default file - * set names for multi-user cases where multiple nodes can be - * running FileManagers for the same case. - */ - if (rootVirtualDirectoryName.isEmpty()) { - localFileDataSourcesCounter = newLocalFilesSetCount; - } - /* * Publish content added events for the added files and directories. */ @@ -448,6 +378,34 @@ public class FileManager implements Closeable { } } + /** + * Generates a name for the root virtual directory for the data source. + * + * NOTE: Although this method is guarded by the file manager's monitor, + * there is currently a minimal chance of default name duplication for + * multi-user cases with multiple FileManagers running on different nodes. + * + * @return A default name for a local/logical files data source of the form: + * LogicalFileSet[N]. + * + * @throws TskCoreException If there is a problem querying the case + * database. + */ + private synchronized String generateFilesDataSourceName() throws TskCoreException { + int localFileDataSourcesCounter = 0; + try { + List localFileDataSources = Case.getCurrentCase().getSleuthkitCase().getVirtualDirectoryRoots(); + for (VirtualDirectory vd : localFileDataSources) { + if (vd.getName().startsWith(VirtualDirectoryNode.LOGICAL_FILE_SET_PREFIX)) { + ++localFileDataSourcesCounter; + } + } + return VirtualDirectoryNode.LOGICAL_FILE_SET_PREFIX + (localFileDataSourcesCounter + 1); + } catch (TskCoreException ex) { + throw new TskCoreException("Error querying for existing local file data sources with defualt names", ex); + } + } + /** * Converts a list of local/logical file and/or directory paths to a list of * file objects. @@ -497,7 +455,7 @@ public class FileManager implements Closeable { /* * Add the directory as a virtual directory. */ - VirtualDirectory virtualDirectory = caseDb.addVirtualDirectory(parentDirectory.getId(), localFile.getName(), trans); + VirtualDirectory virtualDirectory = Case.getCurrentCase().getSleuthkitCase().addVirtualDirectory(parentDirectory.getId(), localFile.getName(), trans); progressUpdater.fileAdded(virtualDirectory); /* @@ -512,32 +470,12 @@ public class FileManager implements Closeable { return virtualDirectory; } else { - return caseDb.addLocalFile(localFile.getName(), localFile.getAbsolutePath(), localFile.length(), + return Case.getCurrentCase().getSleuthkitCase().addLocalFile(localFile.getName(), localFile.getAbsolutePath(), localFile.length(), 0, 0, 0, 0, localFile.isFile(), parentDirectory, trans); } } - @Override - public synchronized void close() throws IOException { - caseDb = null; - } - - /** - * Contructs a case-level service that provides management of files within - * the data sources added to a case and the local files associated with a - * case. - * - * @param tskCase The case database. - * - * @deprecated Use Case.getCurrentCase().getServices().getFileManager() - * instead. - */ - @Deprecated - public FileManager(SleuthkitCase tskCase) { - this(); - } - /** * Adds a set of local/logical files and/or directories to the case database * as data source. @@ -557,7 +495,7 @@ public class FileManager implements Closeable { * @deprecated Use addLocalFilesDataSource instead. */ @Deprecated - public synchronized VirtualDirectory addLocalFilesDirs(List localFilePaths, FileAddProgressUpdater progressUpdater) throws TskCoreException { + public VirtualDirectory addLocalFilesDirs(List localFilePaths, FileAddProgressUpdater progressUpdater) throws TskCoreException { try { return addLocalFilesDataSource("", "", "", localFilePaths, progressUpdater).getRootDirectory(); } catch (TskDataException ex) { @@ -565,4 +503,29 @@ public class FileManager implements Closeable { } } + /** + * Constructs a manager that provides methods for retrieving files from the + * current case and for adding local files, carved files, and derived files + * to the current case. + * + * @param caseDb The case database. + * + * @deprecated Use Case.getCurrentCase().getServices().getFileManager() + * instead. + */ + @Deprecated + public FileManager(SleuthkitCase caseDb) { + } + + /** + * Closes the file manager. + * + * @throws IOException If there is a problem closing the file manager. + * @deprecated File manager clients should not close the file manager. + */ + @Override + @Deprecated + public void close() throws IOException { + } + } diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/Services.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/Services.java index 3106d7c3f7..1dbae18d68 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/Services.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/Services.java @@ -1,19 +1,18 @@ /* * * Autopsy Forensic Browser - * - * Copyright 2012-2016 Basis Technology Corp. - * + * + * Copyright 2011-2016 Basis Technology Corp. + * Contact: carrier sleuthkit org * Copyright 2012 42six Solutions. * Contact: aebadirad 42six com - * Project Contact/Architect: carrier sleuthkit org - * + * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -29,10 +28,10 @@ import java.util.List; import org.openide.util.Lookup; import org.sleuthkit.autopsy.keywordsearchservice.KeywordSearchService; import org.sleuthkit.datamodel.SleuthkitCase; -import org.sleuthkit.autopsy.casemodule.Case; /** - * A class to manage various services. + * A collection of case-level services (e.g., file manager, tags manager, + * keyword search, blackboard). */ public class Services implements Closeable { @@ -42,51 +41,76 @@ public class Services implements Closeable { private final KeywordSearchService keywordSearchService; private final Blackboard blackboard; - Services(Case currentCase, SleuthkitCase caseDb) { - fileManager = new FileManager(currentCase, caseDb); + /** + * Constructs a collection of case-level services (e.g., file manager, tags + * manager, keyword search, blackboard). + * + * @param caseDb The case database for the current case. + * + * @deprecated Use Case.getCurrentCase().getServices() instead. + * + * TODO (AUT-2158): Prevent public construction of the Services class. + */ + @Deprecated + public Services(SleuthkitCase caseDb) { + fileManager = new FileManager(); services.add(fileManager); - tagsManager = new TagsManager(caseDb); + tagsManager = new TagsManager(); services.add(tagsManager); keywordSearchService = Lookup.getDefault().lookup(KeywordSearchService.class); services.add(keywordSearchService); - - blackboard = new Blackboard(); - services.add(blackboard); - } - - public Services(SleuthkitCase tskCase) { - fileManager = new FileManager(tskCase); - services.add(fileManager); - tagsManager = new TagsManager(tskCase); - services.add(tagsManager); - - keywordSearchService = Lookup.getDefault().lookup(KeywordSearchService.class); - services.add(keywordSearchService); - blackboard = new Blackboard(); services.add(blackboard); } + /** + * Gets the file manager service for the current case. + * + * @return The file manager service for the current case. + */ public FileManager getFileManager() { return fileManager; } + /** + * Gets the tags manager service for the current case. + * + * @return The tags manager service for the current case. + */ public TagsManager getTagsManager() { return tagsManager; } + /** + * Gets the keyword search service for the current case. + * + * @return The keyword search service for the current case. + */ public KeywordSearchService getKeywordSearchService() { return keywordSearchService; } - + + /** + * Gets the blackboard service for the current case. + * + * @return The blackboard service for the current case. + */ public Blackboard getBlackboard() { return blackboard; } + /** + * Closes the services for the current case. + * + * @throws IOException if there is a problem closing the services. + * @deprecated Services clients other than the case should not close the + * services. + */ @Override + @Deprecated public void close() throws IOException { for (Closeable service : services) { service.close(); diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagsManager.java b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagsManager.java index 963f54e51f..9da5e9fcbc 100755 --- a/Core/src/org/sleuthkit/autopsy/casemodule/services/TagsManager.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/services/TagsManager.java @@ -32,7 +32,6 @@ import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.BlackboardArtifactTag; import org.sleuthkit.datamodel.Content; import org.sleuthkit.datamodel.ContentTag; -import org.sleuthkit.datamodel.SleuthkitCase; import org.sleuthkit.datamodel.TagName; import org.sleuthkit.datamodel.TskCoreException; @@ -45,7 +44,6 @@ public class TagsManager implements Closeable { private static final Logger logger = Logger.getLogger(TagsManager.class.getName()); private static final String TAGS_SETTINGS_NAME = "Tags"; //NON-NLS private static final String TAG_NAMES_SETTING_KEY = "TagNames"; //NON-NLS - private final SleuthkitCase caseDb; private final HashMap uniqueTagNames = new HashMap<>(); private boolean tagNamesLoaded = false; @@ -53,11 +51,8 @@ public class TagsManager implements Closeable { * Constructs a per case Autopsy service that manages the creation, * updating, and deletion of tags applied to content and blackboard * artifacts by users. - * - * @param caseDb The case database for the current case. */ - TagsManager(SleuthkitCase caseDb) { - this.caseDb = caseDb; + TagsManager() { } /** @@ -71,7 +66,7 @@ public class TagsManager implements Closeable { */ public synchronized List getAllTagNames() throws TskCoreException { lazyLoadExistingTagNames(); - return caseDb.getAllTagNames(); + return Case.getCurrentCase().getSleuthkitCase().getAllTagNames(); } /** @@ -85,7 +80,7 @@ public class TagsManager implements Closeable { */ public synchronized List getTagNamesInUse() throws TskCoreException { lazyLoadExistingTagNames(); - return caseDb.getTagNamesInUse(); + return Case.getCurrentCase().getSleuthkitCase().getTagNamesInUse(); } /** @@ -159,7 +154,7 @@ public class TagsManager implements Closeable { /* * Add the tag name to the case. */ - TagName newTagName = caseDb.addTagName(displayName, description, color); + TagName newTagName = Case.getCurrentCase().getSleuthkitCase().addTagName(displayName, description, color); /* * Add the tag name to the tags settings. @@ -245,7 +240,7 @@ public class TagsManager implements Closeable { } } - tag = caseDb.addContentTag(content, tagName, comment, beginByteOffset, endByteOffset); + tag = Case.getCurrentCase().getSleuthkitCase().addContentTag(content, tagName, comment, beginByteOffset, endByteOffset); } try { @@ -267,7 +262,7 @@ public class TagsManager implements Closeable { public void deleteContentTag(ContentTag tag) throws TskCoreException { synchronized (this) { lazyLoadExistingTagNames(); - caseDb.deleteContentTag(tag); + Case.getCurrentCase().getSleuthkitCase().deleteContentTag(tag); } try { @@ -287,7 +282,7 @@ public class TagsManager implements Closeable { */ public synchronized List getAllContentTags() throws TskCoreException { lazyLoadExistingTagNames(); - return caseDb.getAllContentTags(); + return Case.getCurrentCase().getSleuthkitCase().getAllContentTags(); } /** @@ -302,7 +297,7 @@ public class TagsManager implements Closeable { */ public synchronized long getContentTagsCountByTagName(TagName tagName) throws TskCoreException { lazyLoadExistingTagNames(); - return caseDb.getContentTagsCountByTagName(tagName); + return Case.getCurrentCase().getSleuthkitCase().getContentTagsCountByTagName(tagName); } /** @@ -317,7 +312,7 @@ public class TagsManager implements Closeable { */ public synchronized ContentTag getContentTagByTagID(long tagID) throws TskCoreException { lazyLoadExistingTagNames(); - return caseDb.getContentTagByID(tagID); + return Case.getCurrentCase().getSleuthkitCase().getContentTagByID(tagID); } /** @@ -333,7 +328,7 @@ public class TagsManager implements Closeable { */ public synchronized List getContentTagsByTagName(TagName tagName) throws TskCoreException { lazyLoadExistingTagNames(); - return caseDb.getContentTagsByTagName(tagName); + return Case.getCurrentCase().getSleuthkitCase().getContentTagsByTagName(tagName); } /** @@ -349,7 +344,7 @@ public class TagsManager implements Closeable { */ public synchronized List getContentTagsByContent(Content content) throws TskCoreException { lazyLoadExistingTagNames(); - return caseDb.getContentTagsByContent(content); + return Case.getCurrentCase().getSleuthkitCase().getContentTagsByContent(content); } /** @@ -387,8 +382,8 @@ public class TagsManager implements Closeable { lazyLoadExistingTagNames(); if (null == comment) { throw new IllegalArgumentException("Passed null comment argument"); - } - tag = caseDb.addBlackboardArtifactTag(artifact, tagName, comment); + } + tag = Case.getCurrentCase().getSleuthkitCase().addBlackboardArtifactTag(artifact, tagName, comment); } try { @@ -410,7 +405,7 @@ public class TagsManager implements Closeable { public void deleteBlackboardArtifactTag(BlackboardArtifactTag tag) throws TskCoreException { synchronized (this) { lazyLoadExistingTagNames(); - caseDb.deleteBlackboardArtifactTag(tag); + Case.getCurrentCase().getSleuthkitCase().deleteBlackboardArtifactTag(tag); } try { @@ -430,7 +425,7 @@ public class TagsManager implements Closeable { */ public synchronized List getAllBlackboardArtifactTags() throws TskCoreException { lazyLoadExistingTagNames(); - return caseDb.getAllBlackboardArtifactTags(); + return Case.getCurrentCase().getSleuthkitCase().getAllBlackboardArtifactTags(); } /** @@ -446,7 +441,7 @@ public class TagsManager implements Closeable { */ public synchronized long getBlackboardArtifactTagsCountByTagName(TagName tagName) throws TskCoreException { lazyLoadExistingTagNames(); - return caseDb.getBlackboardArtifactTagsCountByTagName(tagName); + return Case.getCurrentCase().getSleuthkitCase().getBlackboardArtifactTagsCountByTagName(tagName); } /** @@ -461,7 +456,7 @@ public class TagsManager implements Closeable { */ public synchronized BlackboardArtifactTag getBlackboardArtifactTagByTagID(long tagID) throws TskCoreException { lazyLoadExistingTagNames(); - return caseDb.getBlackboardArtifactTagByID(tagID); + return Case.getCurrentCase().getSleuthkitCase().getBlackboardArtifactTagByID(tagID); } /** @@ -477,7 +472,7 @@ public class TagsManager implements Closeable { */ public synchronized List getBlackboardArtifactTagsByTagName(TagName tagName) throws TskCoreException { lazyLoadExistingTagNames(); - return caseDb.getBlackboardArtifactTagsByTagName(tagName); + return Case.getCurrentCase().getSleuthkitCase().getBlackboardArtifactTagsByTagName(tagName); } /** @@ -493,13 +488,18 @@ public class TagsManager implements Closeable { */ public synchronized List getBlackboardArtifactTagsByArtifact(BlackboardArtifact artifact) throws TskCoreException { lazyLoadExistingTagNames(); - return caseDb.getBlackboardArtifactTagsByArtifact(artifact); + return Case.getCurrentCase().getSleuthkitCase().getBlackboardArtifactTagsByArtifact(artifact); } /** - * Saves the avaialble tag names to secondary storage. + * Closes the tags manager, saving the avaialble tag names to secondary + * storage. + * + * @throws IOException If there is a problem closing the tags manager. + * @deprecated Tags manager clients should not close the tags manager. */ @Override + @Deprecated public synchronized void close() throws IOException { saveTagNamesToTagsSettings(); } @@ -524,7 +524,7 @@ public class TagsManager implements Closeable { */ private void addTagNamesFromCurrentCase() { try { - List currentTagNames = caseDb.getAllTagNames(); + List currentTagNames = Case.getCurrentCase().getSleuthkitCase().getAllTagNames(); for (TagName tagName : currentTagNames) { uniqueTagNames.put(tagName.getDisplayName(), tagName); } @@ -550,7 +550,7 @@ public class TagsManager implements Closeable { String[] tagNameAttributes = tagNameTuple.split(","); if (!uniqueTagNames.containsKey(tagNameAttributes[0])) { try { - TagName tagName = caseDb.addTagName(tagNameAttributes[0], tagNameAttributes[1], TagName.HTML_COLOR.getColorByName(tagNameAttributes[2])); + TagName tagName = Case.getCurrentCase().getSleuthkitCase().addTagName(tagNameAttributes[0], tagNameAttributes[1], TagName.HTML_COLOR.getColorByName(tagNameAttributes[2])); uniqueTagNames.put(tagName.getDisplayName(), tagName); } catch (TskCoreException ex) { Logger.getLogger(TagsManager.class.getName()).log(Level.SEVERE, "Failed to add saved tag name " + tagNameAttributes[0], ex); //NON-NLS @@ -566,7 +566,7 @@ public class TagsManager implements Closeable { private void addPredefinedTagNames() { if (!uniqueTagNames.containsKey(NbBundle.getMessage(this.getClass(), "TagsManager.predefTagNames.bookmark.text"))) { try { - TagName tagName = caseDb.addTagName( + TagName tagName = Case.getCurrentCase().getSleuthkitCase().addTagName( NbBundle.getMessage(this.getClass(), "TagsManager.predefTagNames.bookmark.text"), "", TagName.HTML_COLOR.NONE); uniqueTagNames.put(tagName.getDisplayName(), tagName); } catch (TskCoreException ex) { diff --git a/Core/src/org/sleuthkit/autopsy/keywordsearchservice/KeywordSearchService.java b/Core/src/org/sleuthkit/autopsy/keywordsearchservice/KeywordSearchService.java index 69b7c57f4f..af43facec9 100644 --- a/Core/src/org/sleuthkit/autopsy/keywordsearchservice/KeywordSearchService.java +++ b/Core/src/org/sleuthkit/autopsy/keywordsearchservice/KeywordSearchService.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2014 Basis Technology Corp. + * Copyright 2011-2016 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -23,7 +23,9 @@ import org.sleuthkit.datamodel.BlackboardArtifact; import org.sleuthkit.datamodel.TskCoreException; /** - * + * An implementation of a keyword search service. + * + * TODO (AUT-2158: This interface should not extend Closeable. */ public interface KeywordSearchService extends Closeable { @@ -49,4 +51,4 @@ public interface KeywordSearchService extends Closeable { */ public void tryConnect(String host, int port) throws KeywordSearchServiceException; - } +}