Autopsy  4.8.0
Graphical digital forensics platform for The Sleuth Kit and other tools.
TagsManager.java
Go to the documentation of this file.
1 /*
2  * Autopsy Forensic Browser
3  *
4  * Copyright 2011-2018 Basis Technology Corp.
5  * Contact: carrier <at> sleuthkit <dot> org
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 package org.sleuthkit.autopsy.casemodule.services;
20 
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;
27 import java.util.Map;
28 import java.util.Set;
29 import java.util.logging.Level;
30 import org.openide.util.NbBundle;
34 import org.sleuthkit.datamodel.BlackboardArtifact;
35 import org.sleuthkit.datamodel.BlackboardArtifactTag;
36 import org.sleuthkit.datamodel.Content;
37 import org.sleuthkit.datamodel.ContentTag;
38 import org.sleuthkit.datamodel.SleuthkitCase;
39 import org.sleuthkit.datamodel.TagName;
40 import org.sleuthkit.datamodel.TskCoreException;
41 import org.sleuthkit.datamodel.TskData;
42 
47 public class TagsManager implements Closeable {
48 
49  private static final Logger LOGGER = Logger.getLogger(TagsManager.class.getName());
50  private final SleuthkitCase caseDb;
51 
60  public static boolean containsIllegalCharacters(String tagDisplayName) {
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(";"));
71 
72  }
73 
74  @NbBundle.Messages({"TagsManager.notableTagEnding.text= (Notable)"})
80  public static String getNotableTagLabel() {
81  return Bundle.TagsManager_notableTagEnding_text();
82  }
83 
95  public static Set<String> getTagDisplayNames() throws TskCoreException {
96  Set<String> tagDisplayNames = new HashSet<>();
97  Set<TagNameDefinition> customNames = TagNameDefinition.getTagNameDefinitions();
98  customNames.forEach((tagType) -> {
99  tagDisplayNames.add(tagType.getDisplayName());
100  });
101  try {
103  for (TagName tagName : tagsManager.getAllTagNames()) {
104  tagDisplayNames.add(tagName.getDisplayName());
105  }
106  } catch (NoCurrentCaseException ignored) {
107  /*
108  * No current case, nothing more to add to the set.
109  */
110  }
111  return tagDisplayNames;
112  }
113 
114  public static List<String> getNotableTagDisplayNames() {
115  List<String> tagDisplayNames = new ArrayList<>();
116  for (TagNameDefinition tagDef : TagNameDefinition.getTagNameDefinitions()) {
117  if (tagDef.getKnownStatus() == TskData.FileKnown.BAD) {
118  tagDisplayNames.add(tagDef.getDisplayName());
119  }
120  }
121  return tagDisplayNames;
122  }
123 
129  public static List<String> getStandardTagNames() {
130  return TagNameDefinition.getStandardTagNames();
131  }
132 
139  TagsManager(SleuthkitCase caseDb) {
140  this.caseDb = caseDb;
141  for (TagNameDefinition tagName : TagNameDefinition.getTagNameDefinitions()) {
142  tagName.saveToCase(caseDb);
143  }
144  }
145 
153  public List<TagName> getAllTagNames() throws TskCoreException {
154  return caseDb.getAllTagNames();
155  }
156 
165  public List<TagName> getTagNamesInUse() throws TskCoreException {
166  return caseDb.getTagNamesInUse();
167  }
168 
179  public List<TagName> getTagNamesInUseForUser(String userName) throws TskCoreException {
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());
185  }
186  }
187  List<ContentTag> contentTags = caseDb.getAllContentTags();
188  for (ContentTag tag : contentTags) {
189  if (tag.getUserName().equals(userName)) {
190  tagNameSet.add(tag.getName());
191  }
192  }
193  return new ArrayList<>(tagNameSet);
194  }
195 
208  public List<TagName> getTagNamesInUse(long dsObjId) throws TskCoreException {
209  return caseDb.getTagNamesInUse(dsObjId);
210  }
211 
225  public List<TagName> getTagNamesInUseForUser(long dsObjId, String userName) throws TskCoreException {
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());
231  }
232  }
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());
237  }
238  }
239  return new ArrayList<>(tagNameSet);
240  }
241 
255  public Map<String, TagName> getDisplayNamesToTagNamesMap() throws TskCoreException {
268  Map<String, TagName> tagNames = new HashMap<>();
269  Set<TagNameDefinition> customTypes = TagNameDefinition.getTagNameDefinitions();
270  for (TagNameDefinition tagType : customTypes) {
271  tagNames.put(tagType.getDisplayName(), null);
272  }
273  for (TagName tagName : caseDb.getAllTagNames()) {
274  tagNames.put(tagName.getDisplayName(), tagName);
275  }
276  return new HashMap<>(tagNames);
277  }
278 
293  public synchronized TagName addTagName(String displayName) throws TagNameAlreadyExistsException, TskCoreException {
294  return addTagName(displayName, "", TagName.HTML_COLOR.NONE, TskData.FileKnown.UNKNOWN);
295  }
296 
312  public synchronized TagName addTagName(String displayName, String description) throws TagNameAlreadyExistsException, TskCoreException {
313  return addTagName(displayName, description, TagName.HTML_COLOR.NONE, TskData.FileKnown.UNKNOWN);
314  }
315 
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);
333  }
334 
352  public synchronized TagName addTagName(String displayName, String description, TagName.HTML_COLOR color, TskData.FileKnown knownStatus) throws TagNameAlreadyExistsException, TskCoreException {
353  try {
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);
358  return tagName;
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();
364  }
365  }
366  throw ex;
367  }
368  }
369 
383  public ContentTag addContentTag(Content content, TagName tagName) throws TskCoreException {
384  return addContentTag(content, tagName, "", -1, -1);
385  }
386 
401  public ContentTag addContentTag(Content content, TagName tagName, String comment) throws TskCoreException {
402  return addContentTag(content, tagName, comment, -1, -1);
403  }
404 
421  public ContentTag addContentTag(Content content, TagName tagName, String comment, long beginByteOffset, long endByteOffset) throws TskCoreException {
422  ContentTag tag;
423  tag = caseDb.addContentTag(content, tagName, comment, beginByteOffset, endByteOffset);
424  try {
426  } catch (NoCurrentCaseException ex) {
427  throw new TskCoreException("Added a tag to a closed case", ex);
428  }
429  return tag;
430  }
431 
440  public void deleteContentTag(ContentTag tag) throws TskCoreException {
441  caseDb.deleteContentTag(tag);
442  try {
444  } catch (NoCurrentCaseException ex) {
445  throw new TskCoreException("Deleted a tag from a closed case", ex);
446  }
447  }
448 
457  public List<ContentTag> getAllContentTags() throws TskCoreException {
458  return caseDb.getAllContentTags();
459  }
460 
473  public long getContentTagsCountByTagName(TagName tagName) throws TskCoreException {
474  return caseDb.getContentTagsCountByTagName(tagName);
475  }
476 
491  public long getContentTagsCountByTagNameForUser(TagName tagName, String userName) throws TskCoreException {
492  long count = 0;
493  List<ContentTag> contentTags = getContentTagsByTagName(tagName);
494  for (ContentTag tag : contentTags) {
495  if (userName.equals(tag.getUserName())) {
496  count++;
497  }
498  }
499  return count;
500  }
501 
517  public long getContentTagsCountByTagName(TagName tagName, long dsObjId) throws TskCoreException {
518  return caseDb.getContentTagsCountByTagName(tagName, dsObjId);
519  }
520 
537  public long getContentTagsCountByTagNameForUser(TagName tagName, long dsObjId, String userName) throws TskCoreException {
538  long count = 0;
539  List<ContentTag> contentTags = getContentTagsByTagName(tagName, dsObjId);
540  for (ContentTag tag : contentTags) {
541  if (userName.equals(tag.getUserName())) {
542  count++;
543  }
544  }
545  return count;
546  }
547 
558  public ContentTag getContentTagByTagID(long tagId) throws TskCoreException {
559  return caseDb.getContentTagByID(tagId);
560  }
561 
573  public List<ContentTag> getContentTagsByTagName(TagName tagName) throws TskCoreException {
574  return caseDb.getContentTagsByTagName(tagName);
575  }
576 
590  public List<ContentTag> getContentTagsByTagName(TagName tagName, long dsObjId) throws TskCoreException {
591  return caseDb.getContentTagsByTagName(tagName, dsObjId);
592  }
593 
605  public List<ContentTag> getContentTagsByContent(Content content) throws TskCoreException {
606  return caseDb.getContentTagsByContent(content);
607  }
608 
622  public BlackboardArtifactTag addBlackboardArtifactTag(BlackboardArtifact artifact, TagName tagName) throws TskCoreException {
623  return addBlackboardArtifactTag(artifact, tagName, "");
624  }
625 
640  public BlackboardArtifactTag addBlackboardArtifactTag(BlackboardArtifact artifact, TagName tagName, String comment) throws TskCoreException {
641  BlackboardArtifactTag tag = caseDb.addBlackboardArtifactTag(artifact, tagName, comment);
642  try {
644  } catch (NoCurrentCaseException ex) {
645  throw new TskCoreException("Added a tag to a closed case", ex);
646  }
647  return tag;
648  }
649 
658  public void deleteBlackboardArtifactTag(BlackboardArtifactTag tag) throws TskCoreException {
659  caseDb.deleteBlackboardArtifactTag(tag);
660  try {
662  } catch (NoCurrentCaseException ex) {
663  throw new TskCoreException("Deleted a tag from a closed case", ex);
664  }
665  }
666 
675  public List<BlackboardArtifactTag> getAllBlackboardArtifactTags() throws TskCoreException {
676  return caseDb.getAllBlackboardArtifactTags();
677  }
678 
691  public long getBlackboardArtifactTagsCountByTagName(TagName tagName) throws TskCoreException {
692  return caseDb.getBlackboardArtifactTagsCountByTagName(tagName);
693  }
694 
709  public long getBlackboardArtifactTagsCountByTagNameForUser(TagName tagName, String userName) throws TskCoreException {
710  long count = 0;
711  List<BlackboardArtifactTag> artifactTags = getBlackboardArtifactTagsByTagName(tagName);
712  for (BlackboardArtifactTag tag : artifactTags) {
713  if (userName.equals(tag.getUserName())) {
714  count++;
715  }
716  }
717  return count;
718  }
719 
734  public long getBlackboardArtifactTagsCountByTagName(TagName tagName, long dsObjId) throws TskCoreException {
735  return caseDb.getBlackboardArtifactTagsCountByTagName(tagName, dsObjId);
736  }
737 
754  public long getBlackboardArtifactTagsCountByTagNameForUser(TagName tagName, long dsObjId, String userName) throws TskCoreException {
755  long count = 0;
756  List<BlackboardArtifactTag> artifactTags = getBlackboardArtifactTagsByTagName(tagName, dsObjId);
757  for (BlackboardArtifactTag tag : artifactTags) {
758  if (userName.equals(tag.getUserName())) {
759  count++;
760  }
761  }
762  return count;
763  }
764 
775  public BlackboardArtifactTag getBlackboardArtifactTagByTagID(long tagId) throws TskCoreException {
776  return caseDb.getBlackboardArtifactTagByID(tagId);
777  }
778 
792  public List<BlackboardArtifactTag> getBlackboardArtifactTagsByTagName(TagName tagName) throws TskCoreException {
793  return caseDb.getBlackboardArtifactTagsByTagName(tagName);
794  }
795 
810  public List<BlackboardArtifactTag> getBlackboardArtifactTagsByTagName(TagName tagName, long dsObjId) throws TskCoreException {
811  return caseDb.getBlackboardArtifactTagsByTagName(tagName, dsObjId);
812  }
813 
825  public List<BlackboardArtifactTag> getBlackboardArtifactTagsByArtifact(BlackboardArtifact artifact) throws TskCoreException {
826  return caseDb.getBlackboardArtifactTagsByArtifact(artifact);
827  }
828 
832  public static class TagNameAlreadyExistsException extends Exception {
833 
834  private static final long serialVersionUID = 1L;
835  }
836 
847  @Deprecated
848  public boolean tagNameExists(String tagDisplayName) {
849  try {
850  Map<String, TagName> tagNames = getDisplayNamesToTagNamesMap();
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);
854  return false;
855  }
856  }
857 
864  @Deprecated
865  @Override
866  public void close() throws IOException {
867  }
868 
869 }
void notifyContentTagDeleted(ContentTag deletedTag)
Definition: Case.java:1526
void notifyBlackBoardArtifactTagDeleted(BlackboardArtifactTag deletedTag)
Definition: Case.java:1576
synchronized TagName addTagName(String displayName)
List< TagName > getTagNamesInUseForUser(String userName)
long getContentTagsCountByTagName(TagName tagName, long dsObjId)
List< ContentTag > getContentTagsByContent(Content content)
BlackboardArtifactTag addBlackboardArtifactTag(BlackboardArtifact artifact, TagName tagName)
List< BlackboardArtifactTag > getBlackboardArtifactTagsByTagName(TagName tagName, long dsObjId)
long getContentTagsCountByTagNameForUser(TagName tagName, long dsObjId, String userName)
synchronized TagName addTagName(String displayName, String description, TagName.HTML_COLOR color)
static boolean containsIllegalCharacters(String tagDisplayName)
List< ContentTag > getContentTagsByTagName(TagName tagName, long dsObjId)
long getBlackboardArtifactTagsCountByTagNameForUser(TagName tagName, long dsObjId, String userName)
ContentTag addContentTag(Content content, TagName tagName)
void deleteBlackboardArtifactTag(BlackboardArtifactTag tag)
BlackboardArtifactTag getBlackboardArtifactTagByTagID(long tagId)
ContentTag addContentTag(Content content, TagName tagName, String comment, long beginByteOffset, long endByteOffset)
synchronized TagName addTagName(String displayName, String description)
List< BlackboardArtifactTag > getAllBlackboardArtifactTags()
void notifyBlackBoardArtifactTagAdded(BlackboardArtifactTag newTag)
Definition: Case.java:1565
List< BlackboardArtifactTag > getBlackboardArtifactTagsByTagName(TagName tagName)
List< TagName > getTagNamesInUseForUser(long dsObjId, String userName)
long getBlackboardArtifactTagsCountByTagName(TagName tagName, long dsObjId)
synchronized static Logger getLogger(String name)
Definition: Logger.java:124
void notifyContentTagAdded(ContentTag newTag)
Definition: Case.java:1515
List< ContentTag > getContentTagsByTagName(TagName tagName)
long getContentTagsCountByTagNameForUser(TagName tagName, String userName)
long getBlackboardArtifactTagsCountByTagNameForUser(TagName tagName, String userName)
synchronized TagName addTagName(String displayName, String description, TagName.HTML_COLOR color, TskData.FileKnown knownStatus)
ContentTag addContentTag(Content content, TagName tagName, String comment)
BlackboardArtifactTag addBlackboardArtifactTag(BlackboardArtifact artifact, TagName tagName, String comment)
List< BlackboardArtifactTag > getBlackboardArtifactTagsByArtifact(BlackboardArtifact artifact)

Copyright © 2012-2018 Basis Technology. Generated on: Thu Oct 4 2018
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.