19 package org.sleuthkit.autopsy.casemodule.services;
21 import java.io.Closeable;
22 import java.io.IOException;
23 import java.util.ArrayList;
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;
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(
";"));
73 @NbBundle.Messages({
"TagsManager.notableTagEnding.text= (Notable)"})
80 return Bundle.TagsManager_notableTagEnding_text();
95 Set<String> tagDisplayNames =
new HashSet<>();
96 Set<TagNameDefinition> customNames = TagNameDefinition.getTagNameDefinitions();
97 customNames.forEach((tagType) -> {
98 tagDisplayNames.add(tagType.getDisplayName());
103 tagDisplayNames.add(tagName.getDisplayName());
105 }
catch (IllegalStateException ignored) {
110 return tagDisplayNames;
114 List<String> tagDisplayNames =
new ArrayList<>();
115 for (TagNameDefinition tagDef : TagNameDefinition.getTagNameDefinitions()) {
116 if (tagDef.getKnownStatus() == TskData.FileKnown.BAD) {
117 tagDisplayNames.add(tagDef.getDisplayName());
120 return tagDisplayNames;
131 for (TagNameDefinition tagName : TagNameDefinition.getTagNameDefinitions()) {
132 tagName.saveToCase(caseDb);
144 return caseDb.getAllTagNames();
156 return caseDb.getTagNamesInUse();
185 Map<String, TagName> tagNames =
new HashMap<>();
186 Set<TagNameDefinition> customTypes = TagNameDefinition.getTagNameDefinitions();
187 for (TagNameDefinition tagType : customTypes) {
188 tagNames.put(tagType.getDisplayName(), null);
190 for (TagName tagName : caseDb.getAllTagNames()) {
191 tagNames.put(tagName.getDisplayName(), tagName);
193 return new HashMap<>(tagNames);
211 return addTagName(displayName,
"", TagName.HTML_COLOR.NONE, TskData.FileKnown.UNKNOWN);
229 public synchronized TagName
addTagName(String displayName, String description)
throws TagNameAlreadyExistsException, TskCoreException {
230 return addTagName(displayName, description, TagName.HTML_COLOR.NONE, TskData.FileKnown.UNKNOWN);
248 public synchronized TagName
addTagName(String displayName, String description, TagName.HTML_COLOR color) throws TagNameAlreadyExistsException, TskCoreException {
249 return addTagName(displayName, description, color, TskData.FileKnown.UNKNOWN);
269 public synchronized TagName
addTagName(String displayName, String description, TagName.HTML_COLOR color, TskData.FileKnown knownStatus) throws TagNameAlreadyExistsException, TskCoreException {
271 TagName tagName = caseDb.addOrUpdateTagName(displayName, description, color, knownStatus);
272 Set<TagNameDefinition> customTypes = TagNameDefinition.getTagNameDefinitions();
273 customTypes.add(
new TagNameDefinition(displayName, description, color, knownStatus));
274 TagNameDefinition.setTagNameDefinitions(customTypes);
276 }
catch (TskCoreException ex) {
277 List<TagName> existingTagNames = caseDb.getAllTagNames();
278 for (TagName tagName : existingTagNames) {
279 if (tagName.getDisplayName().equals(displayName)) {
280 throw new TagNameAlreadyExistsException();
300 public ContentTag
addContentTag(Content content, TagName tagName)
throws TskCoreException {
318 public ContentTag
addContentTag(Content content, TagName tagName, String comment)
throws TskCoreException {
338 public ContentTag
addContentTag(Content content, TagName tagName, String comment,
long beginByteOffset,
long endByteOffset)
throws TskCoreException {
340 tag = caseDb.addContentTag(content, tagName, comment, beginByteOffset, endByteOffset);
343 }
catch (IllegalStateException ex) {
344 throw new TskCoreException(
"Added a tag to a closed case", ex);
358 caseDb.deleteContentTag(tag);
361 }
catch (IllegalStateException ex) {
362 throw new TskCoreException(
"Deleted a tag from a closed case", ex);
375 return caseDb.getAllContentTags();
391 return caseDb.getContentTagsCountByTagName(tagName);
405 return caseDb.getContentTagByID(tagId);
420 return caseDb.getContentTagsByTagName(tagName);
435 return caseDb.getContentTagsByContent(content);
469 public BlackboardArtifactTag
addBlackboardArtifactTag(BlackboardArtifact artifact, TagName tagName, String comment)
throws TskCoreException {
470 BlackboardArtifactTag tag = caseDb.addBlackboardArtifactTag(artifact, tagName, comment);
473 }
catch (IllegalStateException ex) {
474 throw new TskCoreException(
"Added a tag to a closed case", ex);
488 caseDb.deleteBlackboardArtifactTag(tag);
491 }
catch (IllegalStateException ex) {
492 throw new TskCoreException(
"Deleted a tag from a closed case", ex);
505 return caseDb.getAllBlackboardArtifactTags();
521 return caseDb.getBlackboardArtifactTagsCountByTagName(tagName);
535 return caseDb.getBlackboardArtifactTagByID(tagId);
552 return caseDb.getBlackboardArtifactTagsByTagName(tagName);
567 return caseDb.getBlackboardArtifactTagsByArtifact(artifact);
573 public static class TagNameAlreadyExistsException
extends Exception {
592 return tagNames.containsKey(tagDisplayName) && (tagNames.get(tagDisplayName) != null);
593 }
catch (TskCoreException ex) {
594 LOGGER.log(Level.SEVERE,
"Error querying case database for tag names", ex);
607 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)