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(
";"));
74 @NbBundle.Messages({
"TagsManager.notableTagEnding.text= (Notable)"})
81 return Bundle.TagsManager_notableTagEnding_text();
96 Set<String> tagDisplayNames =
new HashSet<>();
97 Set<TagNameDefinition> customNames = TagNameDefinition.getTagNameDefinitions();
98 customNames.forEach((tagType) -> {
99 tagDisplayNames.add(tagType.getDisplayName());
104 tagDisplayNames.add(tagName.getDisplayName());
111 return tagDisplayNames;
115 List<String> tagDisplayNames =
new ArrayList<>();
116 for (TagNameDefinition tagDef : TagNameDefinition.getTagNameDefinitions()) {
117 if (tagDef.getKnownStatus() == TskData.FileKnown.BAD) {
118 tagDisplayNames.add(tagDef.getDisplayName());
121 return tagDisplayNames;
130 return TagNameDefinition.getStandardTagNames();
141 for (TagNameDefinition tagName : TagNameDefinition.getTagNameDefinitions()) {
142 tagName.saveToCase(caseDb);
154 return caseDb.getAllTagNames();
166 return caseDb.getTagNamesInUse();
180 Set<TagName> tagNameSet =
new HashSet<>();
181 List<BlackboardArtifactTag> artifactTags = caseDb.getAllBlackboardArtifactTags();
182 for (BlackboardArtifactTag tag : artifactTags) {
183 if (tag.getUserName().equals(userName)) {
184 tagNameSet.add(tag.getName());
187 List<ContentTag> contentTags = caseDb.getAllContentTags();
188 for (ContentTag tag : contentTags) {
189 if (tag.getUserName().equals(userName)) {
190 tagNameSet.add(tag.getName());
193 return new ArrayList<>(tagNameSet);
209 return caseDb.getTagNamesInUse(dsObjId);
226 Set<TagName> tagNameSet =
new HashSet<>();
227 List<BlackboardArtifactTag> artifactTags = caseDb.getAllBlackboardArtifactTags();
228 for (BlackboardArtifactTag tag : artifactTags) {
229 if (tag.getUserName().equals(userName) && tag.getArtifact().getDataSource().getId() == dsObjId) {
230 tagNameSet.add(tag.getName());
233 List<ContentTag> contentTags = caseDb.getAllContentTags();
234 for (ContentTag tag : contentTags) {
235 if (tag.getUserName().equals(userName) && tag.getContent().getDataSource().getId() == dsObjId) {
236 tagNameSet.add(tag.getName());
239 return new ArrayList<>(tagNameSet);
268 Map<String, TagName> tagNames =
new HashMap<>();
269 Set<TagNameDefinition> customTypes = TagNameDefinition.getTagNameDefinitions();
270 for (TagNameDefinition tagType : customTypes) {
271 tagNames.put(tagType.getDisplayName(), null);
273 for (TagName tagName : caseDb.getAllTagNames()) {
274 tagNames.put(tagName.getDisplayName(), tagName);
276 return new HashMap<>(tagNames);
294 return addTagName(displayName,
"", TagName.HTML_COLOR.NONE, TskData.FileKnown.UNKNOWN);
312 public synchronized TagName
addTagName(String displayName, String description)
throws TagNameAlreadyExistsException, TskCoreException {
313 return addTagName(displayName, description, TagName.HTML_COLOR.NONE, TskData.FileKnown.UNKNOWN);
331 public synchronized TagName
addTagName(String displayName, String description, TagName.HTML_COLOR color) throws TagNameAlreadyExistsException, TskCoreException {
332 return addTagName(displayName, description, color, TskData.FileKnown.UNKNOWN);
352 public synchronized TagName
addTagName(String displayName, String description, TagName.HTML_COLOR color, TskData.FileKnown knownStatus) throws TagNameAlreadyExistsException, TskCoreException {
354 TagName tagName = caseDb.addOrUpdateTagName(displayName, description, color, knownStatus);
355 Set<TagNameDefinition> customTypes = TagNameDefinition.getTagNameDefinitions();
356 customTypes.add(
new TagNameDefinition(displayName, description, color, knownStatus));
357 TagNameDefinition.setTagNameDefinitions(customTypes);
359 }
catch (TskCoreException ex) {
360 List<TagName> existingTagNames = caseDb.getAllTagNames();
361 for (TagName tagName : existingTagNames) {
362 if (tagName.getDisplayName().equals(displayName)) {
363 throw new TagNameAlreadyExistsException();
383 public ContentTag
addContentTag(Content content, TagName tagName)
throws TskCoreException {
401 public ContentTag
addContentTag(Content content, TagName tagName, String comment)
throws TskCoreException {
421 public ContentTag
addContentTag(Content content, TagName tagName, String comment,
long beginByteOffset,
long endByteOffset)
throws TskCoreException {
423 tag = caseDb.addContentTag(content, tagName, comment, beginByteOffset, endByteOffset);
427 throw new TskCoreException(
"Added a tag to a closed case", ex);
441 caseDb.deleteContentTag(tag);
445 throw new TskCoreException(
"Deleted a tag from a closed case", ex);
458 return caseDb.getAllContentTags();
474 return caseDb.getContentTagsCountByTagName(tagName);
494 for (ContentTag tag : contentTags) {
495 if (userName.equals(tag.getUserName())) {
518 return caseDb.getContentTagsCountByTagName(tagName, dsObjId);
540 for (ContentTag tag : contentTags) {
541 if (userName.equals(tag.getUserName())) {
559 return caseDb.getContentTagByID(tagId);
574 return caseDb.getContentTagsByTagName(tagName);
591 return caseDb.getContentTagsByTagName(tagName, dsObjId);
606 return caseDb.getContentTagsByContent(content);
640 public BlackboardArtifactTag
addBlackboardArtifactTag(BlackboardArtifact artifact, TagName tagName, String comment)
throws TskCoreException {
641 BlackboardArtifactTag tag = caseDb.addBlackboardArtifactTag(artifact, tagName, comment);
645 throw new TskCoreException(
"Added a tag to a closed case", ex);
659 caseDb.deleteBlackboardArtifactTag(tag);
663 throw new TskCoreException(
"Deleted a tag from a closed case", ex);
676 return caseDb.getAllBlackboardArtifactTags();
692 return caseDb.getBlackboardArtifactTagsCountByTagName(tagName);
712 for (BlackboardArtifactTag tag : artifactTags) {
713 if (userName.equals(tag.getUserName())) {
735 return caseDb.getBlackboardArtifactTagsCountByTagName(tagName, dsObjId);
757 for (BlackboardArtifactTag tag : artifactTags) {
758 if (userName.equals(tag.getUserName())) {
776 return caseDb.getBlackboardArtifactTagByID(tagId);
793 return caseDb.getBlackboardArtifactTagsByTagName(tagName);
811 return caseDb.getBlackboardArtifactTagsByTagName(tagName, dsObjId);
826 return caseDb.getBlackboardArtifactTagsByArtifact(artifact);
832 public static class TagNameAlreadyExistsException
extends Exception {
851 return tagNames.containsKey(tagDisplayName) && (tagNames.get(tagDisplayName) != null);
852 }
catch (TskCoreException ex) {
853 LOGGER.log(Level.SEVERE,
"Error querying case database for tag names", ex);
866 public void close() throws IOException {
void notifyContentTagDeleted(ContentTag deletedTag)
void notifyBlackBoardArtifactTagDeleted(BlackboardArtifactTag deletedTag)
TagsManager getTagsManager()
void notifyBlackBoardArtifactTagAdded(BlackboardArtifactTag newTag)
synchronized static Logger getLogger(String name)
static Case getCurrentCaseThrows()
void notifyContentTagAdded(ContentTag newTag)