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.HashSet;
26 import java.util.List;
29 import java.util.logging.Level;
30 import org.openide.util.NbBundle;
48 @NbBundle.Messages(
"TagsManager.predefTagNames.bookmark.text=Bookmark")
49 private static final Set<String>
STANDARD_TAG_DISPLAY_NAMES =
new HashSet<>(Arrays.asList(Bundle.TagsManager_predefTagNames_bookmark_text()));
70 return caseDb.getAllTagNames();
82 return caseDb.getTagNamesInUse();
111 Map<String, TagName> tagNames =
new HashMap<>();
112 Set<TagNameDefiniton> customTypes = TagNameDefiniton.getTagNameDefinitions();
113 for (TagNameDefiniton tagType : customTypes) {
114 tagNames.put(tagType.getDisplayName(), null);
116 for (TagName tagName : caseDb.getAllTagNames()) {
117 tagNames.put(tagName.getDisplayName(), tagName);
119 return new HashMap<>(tagNames);
137 return addTagName(displayName,
"", TagName.HTML_COLOR.NONE);
155 public synchronized TagName
addTagName(String displayName, String description)
throws TagNameAlreadyExistsException, TskCoreException {
156 return addTagName(displayName, description, TagName.HTML_COLOR.NONE);
174 public synchronized TagName
addTagName(String displayName, String description, TagName.HTML_COLOR color) throws TagNameAlreadyExistsException, TskCoreException {
176 TagName tagName = caseDb.addTagName(displayName, description, color);
177 if (!STANDARD_TAG_DISPLAY_NAMES.contains(displayName)) {
178 Set<TagNameDefiniton> customTypes = TagNameDefiniton.getTagNameDefinitions();
179 customTypes.add(
new TagNameDefiniton(displayName, description, color));
180 TagNameDefiniton.setTagNameDefinitions(customTypes);
183 }
catch (TskCoreException ex) {
184 List<TagName> existingTagNames = caseDb.getAllTagNames();
185 for (TagName tagName : existingTagNames) {
186 if (tagName.getDisplayName().equals(displayName)) {
187 throw new TagNameAlreadyExistsException();
207 public ContentTag
addContentTag(Content content, TagName tagName)
throws TskCoreException {
225 public ContentTag
addContentTag(Content content, TagName tagName, String comment)
throws TskCoreException {
245 public ContentTag
addContentTag(Content content, TagName tagName, String comment,
long beginByteOffset,
long endByteOffset)
throws TskCoreException {
247 tag = caseDb.addContentTag(content, tagName, comment, beginByteOffset, endByteOffset);
250 }
catch (IllegalStateException ex) {
251 throw new TskCoreException(
"Added a tag to a closed case", ex);
265 caseDb.deleteContentTag(tag);
268 }
catch (IllegalStateException ex) {
269 throw new TskCoreException(
"Deleted a tag from a closed case", ex);
282 return caseDb.getAllContentTags();
298 return caseDb.getContentTagsCountByTagName(tagName);
312 return caseDb.getContentTagByID(tagId);
327 return caseDb.getContentTagsByTagName(tagName);
342 return caseDb.getContentTagsByContent(content);
358 public synchronized BlackboardArtifactTag
addBlackboardArtifactTag(BlackboardArtifact artifact, TagName tagName)
throws TskCoreException {
376 public synchronized BlackboardArtifactTag
addBlackboardArtifactTag(BlackboardArtifact artifact, TagName tagName, String comment)
throws TskCoreException {
377 BlackboardArtifactTag tag = caseDb.addBlackboardArtifactTag(artifact, tagName, comment);
380 }
catch (IllegalStateException ex) {
381 throw new TskCoreException(
"Added a tag to a closed case", ex);
395 caseDb.deleteBlackboardArtifactTag(tag);
398 }
catch (IllegalStateException ex) {
399 throw new TskCoreException(
"Deleted a tag from a closed case", ex);
412 return caseDb.getAllBlackboardArtifactTags();
428 return caseDb.getBlackboardArtifactTagsCountByTagName(tagName);
442 return caseDb.getBlackboardArtifactTagByID(tagId);
459 return caseDb.getBlackboardArtifactTagsByTagName(tagName);
474 return caseDb.getBlackboardArtifactTagsByArtifact(artifact);
486 return (content.contains(
"\\")
487 || content.contains(
":")
488 || content.contains(
"*")
489 || content.contains(
"?")
490 || content.contains(
"\"")
491 || content.contains(
"<")
492 || content.contains(
">")
493 || content.contains(
"|")
494 || content.contains(
",")
495 || content.contains(
";"));
502 public static class TagNameAlreadyExistsException
extends Exception {
521 return tagNames.containsKey(tagDisplayName) && (tagNames.get(tagDisplayName) != null);
522 }
catch (TskCoreException ex) {
523 LOGGER.log(Level.SEVERE,
"Error querying case database for tag names", ex);
536 public synchronized void close() throws IOException {
void notifyContentTagDeleted(ContentTag deletedTag)
void notifyBlackBoardArtifactTagDeleted(BlackboardArtifactTag deletedTag)
void notifyBlackBoardArtifactTagAdded(BlackboardArtifactTag newTag)
static Case getCurrentCase()
synchronized static Logger getLogger(String name)
void notifyContentTagAdded(ContentTag newTag)