19 package org.sleuthkit.autopsy.casemodule.services;
21 import java.io.Closeable;
22 import java.io.IOException;
23 import java.util.Arrays;
24 import java.util.HashMap;
25 import java.util.List;
26 import java.util.logging.Level;
27 import org.openide.util.NbBundle;
74 return caseDb.getAllTagNames();
88 return caseDb.getTagNamesInUse();
100 return uniqueTagNames.containsKey(tagDisplayName);
117 return addTagName(displayName,
"", TagName.HTML_COLOR.NONE);
134 public TagName
addTagName(String displayName, String description)
throws TagNameAlreadyExistsException, TskCoreException {
135 return addTagName(displayName, description, TagName.HTML_COLOR.NONE);
153 public synchronized TagName
addTagName(String displayName, String description, TagName.HTML_COLOR color) throws TagNameAlreadyExistsException, TskCoreException {
155 if (uniqueTagNames.containsKey(displayName)) {
156 throw new TagNameAlreadyExistsException();
162 TagName newTagName = caseDb.addTagName(displayName, description, color);
167 uniqueTagNames.put(newTagName.getDisplayName(), newTagName);
184 public ContentTag
addContentTag(Content content, TagName tagName)
throws TskCoreException {
200 public ContentTag
addContentTag(Content content, TagName tagName, String comment)
throws TskCoreException {
220 public ContentTag
addContentTag(Content content, TagName tagName, String comment,
long beginByteOffset,
long endByteOffset)
throws IllegalArgumentException, TskCoreException {
222 synchronized (
this) {
225 if (beginByteOffset >= 0 && endByteOffset >= 1) {
226 if (beginByteOffset > content.getSize() - 1) {
227 throw new IllegalArgumentException(NbBundle.getMessage(
this.getClass(),
228 "TagsManager.addContentTag.exception.beginByteOffsetOOR.msg",
229 beginByteOffset, content.getSize() - 1));
232 if (endByteOffset > content.getSize() - 1) {
233 throw new IllegalArgumentException(
234 NbBundle.getMessage(
this.getClass(),
"TagsManager.addContentTag.exception.endByteOffsetOOR.msg",
235 endByteOffset, content.getSize() - 1));
238 if (endByteOffset < beginByteOffset) {
239 throw new IllegalArgumentException(
240 NbBundle.getMessage(
this.getClass(),
"TagsManager.addContentTag.exception.endLTbegin.msg"));
244 tag = caseDb.addContentTag(content, tagName, comment, beginByteOffset, endByteOffset);
249 }
catch (IllegalStateException ex) {
250 logger.log(Level.SEVERE, NbBundle.getMessage(
TagsManager.class,
"TagsManager.addContentTag.noCaseWarning"), ex);
264 synchronized (
this) {
266 caseDb.deleteContentTag(tag);
271 }
catch (IllegalStateException ex) {
272 logger.log(Level.SEVERE, NbBundle.getMessage(
TagsManager.class,
"TagsManager.deleteContentTag.noCaseWarning"), ex);
286 return caseDb.getAllContentTags();
301 return caseDb.getContentTagsCountByTagName(tagName);
316 return caseDb.getContentTagByID(tagID);
332 return caseDb.getContentTagsByTagName(tagName);
348 return caseDb.getContentTagsByContent(content);
380 public BlackboardArtifactTag
addBlackboardArtifactTag(BlackboardArtifact artifact, TagName tagName, String comment)
throws TskCoreException {
381 BlackboardArtifactTag tag;
382 synchronized (
this) {
384 tag = caseDb.addBlackboardArtifactTag(artifact, tagName, comment);
389 }
catch (IllegalStateException ex) {
390 logger.log(Level.SEVERE, NbBundle.getMessage(
TagsManager.class,
"TagsManager.addBlackboardArtifactTag.noCaseWarning"), ex);
404 synchronized (
this) {
406 caseDb.deleteBlackboardArtifactTag(tag);
411 }
catch (IllegalStateException ex) {
412 logger.log(Level.WARNING, NbBundle.getMessage(
TagsManager.class,
"TagsManager.deleteBlackboardArtifactTag.noCaseWarning"), ex);
426 return caseDb.getAllBlackboardArtifactTags();
442 return caseDb.getBlackboardArtifactTagsCountByTagName(tagName);
457 return caseDb.getBlackboardArtifactTagByID(tagID);
473 return caseDb.getBlackboardArtifactTagsByTagName(tagName);
489 return caseDb.getBlackboardArtifactTagsByArtifact(artifact);
496 public synchronized void close() throws IOException {
505 if (!tagNamesLoaded) {
510 tagNamesLoaded =
true;
520 List<TagName> currentTagNames = caseDb.getAllTagNames();
521 for (TagName tagName : currentTagNames) {
522 uniqueTagNames.put(tagName.getDisplayName(), tagName);
524 }
catch (TskCoreException ex) {
536 if (null != setting && !setting.isEmpty()) {
538 List<String> tagNameTuples = Arrays.asList(setting.split(
";"));
542 for (String tagNameTuple : tagNameTuples) {
543 String[] tagNameAttributes = tagNameTuple.split(
",");
544 if (!uniqueTagNames.containsKey(tagNameAttributes[0])) {
546 TagName tagName = caseDb.addTagName(tagNameAttributes[0], tagNameAttributes[1], TagName.HTML_COLOR.getColorByName(tagNameAttributes[2]));
547 uniqueTagNames.put(tagName.getDisplayName(), tagName);
548 }
catch (TskCoreException ex) {
560 if (!uniqueTagNames.containsKey(NbBundle.getMessage(
this.getClass(),
"TagsManager.predefTagNames.bookmark.text"))) {
562 TagName tagName = caseDb.addTagName(
563 NbBundle.getMessage(
this.getClass(),
"TagsManager.predefTagNames.bookmark.text"),
"", TagName.HTML_COLOR.NONE);
564 uniqueTagNames.put(tagName.getDisplayName(), tagName);
565 }
catch (TskCoreException ex) {
566 Logger.
getLogger(
TagsManager.class.getName()).log(Level.SEVERE,
"Failed to add standard 'Bookmark' tag name to case database", ex);
576 if (!uniqueTagNames.isEmpty()) {
577 StringBuilder setting =
new StringBuilder();
578 for (TagName tagName : uniqueTagNames.values()) {
579 if (setting.length() != 0) {
582 setting.append(tagName.getDisplayName()).append(
",");
583 setting.append(tagName.getDescription()).append(
",");
584 setting.append(tagName.getColor().name());
593 public static class TagNameAlreadyExistsException
extends Exception {
void notifyContentTagDeleted(ContentTag deletedTag)
void notifyBlackBoardArtifactTagDeleted(BlackboardArtifactTag deletedTag)
static synchronized void setConfigSetting(String moduleName, String settingName, String settingVal)
void notifyBlackBoardArtifactTagAdded(BlackboardArtifactTag newTag)
static String getConfigSetting(String moduleName, String settingName)
static Case getCurrentCase()
synchronized static Logger getLogger(String name)
void notifyContentTagAdded(ContentTag newTag)