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()));
61 return (tagDisplayName.contains(
"\\")
62 || tagDisplayName.contains(
":")
63 || tagDisplayName.contains(
"*")
64 || tagDisplayName.contains(
"?")
65 || tagDisplayName.contains(
"\"")
66 || tagDisplayName.contains(
"<")
67 || tagDisplayName.contains(
">")
68 || tagDisplayName.contains(
"|")
69 || tagDisplayName.contains(
",")
70 || tagDisplayName.contains(
";"));
87 Set<TagNameDefiniton> customNames = TagNameDefiniton.getTagNameDefinitions();
88 customNames.forEach((tagType) -> {
89 tagDisplayNames.add(tagType.getDisplayName());
94 tagDisplayNames.add(tagName.getDisplayName());
96 }
catch (IllegalStateException ignored) {
101 return tagDisplayNames;
122 return caseDb.getAllTagNames();
134 return caseDb.getTagNamesInUse();
163 Map<String, TagName> tagNames =
new HashMap<>();
164 Set<TagNameDefiniton> customTypes = TagNameDefiniton.getTagNameDefinitions();
165 for (TagNameDefiniton tagType : customTypes) {
166 tagNames.put(tagType.getDisplayName(), null);
168 for (TagName tagName : caseDb.getAllTagNames()) {
169 tagNames.put(tagName.getDisplayName(), tagName);
171 return new HashMap<>(tagNames);
189 return addTagName(displayName,
"", TagName.HTML_COLOR.NONE);
207 public synchronized TagName
addTagName(String displayName, String description)
throws TagNameAlreadyExistsException, TskCoreException {
208 return addTagName(displayName, description, TagName.HTML_COLOR.NONE);
226 public synchronized TagName
addTagName(String displayName, String description, TagName.HTML_COLOR color) throws TagNameAlreadyExistsException, TskCoreException {
228 TagName tagName = caseDb.addTagName(displayName, description, color);
229 if (!STANDARD_TAG_DISPLAY_NAMES.contains(displayName)) {
230 Set<TagNameDefiniton> customTypes = TagNameDefiniton.getTagNameDefinitions();
231 customTypes.add(
new TagNameDefiniton(displayName, description, color));
232 TagNameDefiniton.setTagNameDefinitions(customTypes);
235 }
catch (TskCoreException ex) {
236 List<TagName> existingTagNames = caseDb.getAllTagNames();
237 for (TagName tagName : existingTagNames) {
238 if (tagName.getDisplayName().equals(displayName)) {
239 throw new TagNameAlreadyExistsException();
259 public ContentTag
addContentTag(Content content, TagName tagName)
throws TskCoreException {
277 public ContentTag
addContentTag(Content content, TagName tagName, String comment)
throws TskCoreException {
297 public ContentTag
addContentTag(Content content, TagName tagName, String comment,
long beginByteOffset,
long endByteOffset)
throws TskCoreException {
299 tag = caseDb.addContentTag(content, tagName, comment, beginByteOffset, endByteOffset);
302 }
catch (IllegalStateException ex) {
303 throw new TskCoreException(
"Added a tag to a closed case", ex);
317 caseDb.deleteContentTag(tag);
320 }
catch (IllegalStateException ex) {
321 throw new TskCoreException(
"Deleted a tag from a closed case", ex);
334 return caseDb.getAllContentTags();
350 return caseDb.getContentTagsCountByTagName(tagName);
364 return caseDb.getContentTagByID(tagId);
379 return caseDb.getContentTagsByTagName(tagName);
394 return caseDb.getContentTagsByContent(content);
428 public BlackboardArtifactTag
addBlackboardArtifactTag(BlackboardArtifact artifact, TagName tagName, String comment)
throws TskCoreException {
429 BlackboardArtifactTag tag = caseDb.addBlackboardArtifactTag(artifact, tagName, comment);
432 }
catch (IllegalStateException ex) {
433 throw new TskCoreException(
"Added a tag to a closed case", ex);
447 caseDb.deleteBlackboardArtifactTag(tag);
450 }
catch (IllegalStateException ex) {
451 throw new TskCoreException(
"Deleted a tag from a closed case", ex);
464 return caseDb.getAllBlackboardArtifactTags();
480 return caseDb.getBlackboardArtifactTagsCountByTagName(tagName);
494 return caseDb.getBlackboardArtifactTagByID(tagId);
511 return caseDb.getBlackboardArtifactTagsByTagName(tagName);
526 return caseDb.getBlackboardArtifactTagsByArtifact(artifact);
532 public static class TagNameAlreadyExistsException
extends Exception {
551 return tagNames.containsKey(tagDisplayName) && (tagNames.get(tagDisplayName) != null);
552 }
catch (TskCoreException ex) {
553 LOGGER.log(Level.SEVERE,
"Error querying case database for tag names", ex);
566 public void close() throws IOException {
void notifyContentTagDeleted(ContentTag deletedTag)
void notifyBlackBoardArtifactTagDeleted(BlackboardArtifactTag deletedTag)
TagsManager getTagsManager()
void notifyBlackBoardArtifactTagAdded(BlackboardArtifactTag newTag)
static Case getCurrentCase()
synchronized static Logger getLogger(String name)
void notifyContentTagAdded(ContentTag newTag)