Autopsy  4.7.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 
51  private final SleuthkitCase caseDb;
52 
61  public static boolean containsIllegalCharacters(String tagDisplayName) {
62  return (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  || tagDisplayName.contains(";"));
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 
182  public Map<String, TagName> getDisplayNamesToTagNamesMap() throws TskCoreException {
195  Map<String, TagName> tagNames = new HashMap<>();
196  Set<TagNameDefinition> customTypes = TagNameDefinition.getTagNameDefinitions();
197  for (TagNameDefinition tagType : customTypes) {
198  tagNames.put(tagType.getDisplayName(), null);
199  }
200  for (TagName tagName : caseDb.getAllTagNames()) {
201  tagNames.put(tagName.getDisplayName(), tagName);
202  }
203  return new HashMap<>(tagNames);
204  }
205 
220  public synchronized TagName addTagName(String displayName) throws TagNameAlreadyExistsException, TskCoreException {
221  return addTagName(displayName, "", TagName.HTML_COLOR.NONE, TskData.FileKnown.UNKNOWN);
222  }
223 
239  public synchronized TagName addTagName(String displayName, String description) throws TagNameAlreadyExistsException, TskCoreException {
240  return addTagName(displayName, description, TagName.HTML_COLOR.NONE, TskData.FileKnown.UNKNOWN);
241  }
242 
258  public synchronized TagName addTagName(String displayName, String description, TagName.HTML_COLOR color) throws TagNameAlreadyExistsException, TskCoreException {
259  return addTagName(displayName, description, color, TskData.FileKnown.UNKNOWN);
260  }
261 
279  public synchronized TagName addTagName(String displayName, String description, TagName.HTML_COLOR color, TskData.FileKnown knownStatus) throws TagNameAlreadyExistsException, TskCoreException {
280  try {
281  TagName tagName = caseDb.addOrUpdateTagName(displayName, description, color, knownStatus);
282  Set<TagNameDefinition> customTypes = TagNameDefinition.getTagNameDefinitions();
283  customTypes.add(new TagNameDefinition(displayName, description, color, knownStatus));
284  TagNameDefinition.setTagNameDefinitions(customTypes);
285  return tagName;
286  } catch (TskCoreException ex) {
287  List<TagName> existingTagNames = caseDb.getAllTagNames();
288  for (TagName tagName : existingTagNames) {
289  if (tagName.getDisplayName().equals(displayName)) {
290  throw new TagNameAlreadyExistsException();
291  }
292  }
293  throw ex;
294  }
295  }
296 
310  public ContentTag addContentTag(Content content, TagName tagName) throws TskCoreException {
311  return addContentTag(content, tagName, "", -1, -1);
312  }
313 
328  public ContentTag addContentTag(Content content, TagName tagName, String comment) throws TskCoreException {
329  return addContentTag(content, tagName, comment, -1, -1);
330  }
331 
348  public ContentTag addContentTag(Content content, TagName tagName, String comment, long beginByteOffset, long endByteOffset) throws TskCoreException {
349  ContentTag tag;
350  tag = caseDb.addContentTag(content, tagName, comment, beginByteOffset, endByteOffset);
351  try {
353  } catch (NoCurrentCaseException ex) {
354  throw new TskCoreException("Added a tag to a closed case", ex);
355  }
356  return tag;
357  }
358 
367  public void deleteContentTag(ContentTag tag) throws TskCoreException {
368  caseDb.deleteContentTag(tag);
369  try {
371  } catch (NoCurrentCaseException ex) {
372  throw new TskCoreException("Deleted a tag from a closed case", ex);
373  }
374  }
375 
384  public List<ContentTag> getAllContentTags() throws TskCoreException {
385  return caseDb.getAllContentTags();
386  }
387 
400  public long getContentTagsCountByTagName(TagName tagName) throws TskCoreException {
401  return caseDb.getContentTagsCountByTagName(tagName);
402  }
403 
414  public ContentTag getContentTagByTagID(long tagId) throws TskCoreException {
415  return caseDb.getContentTagByID(tagId);
416  }
417 
429  public List<ContentTag> getContentTagsByTagName(TagName tagName) throws TskCoreException {
430  return caseDb.getContentTagsByTagName(tagName);
431  }
432 
444  public List<ContentTag> getContentTagsByContent(Content content) throws TskCoreException {
445  return caseDb.getContentTagsByContent(content);
446  }
447 
461  public BlackboardArtifactTag addBlackboardArtifactTag(BlackboardArtifact artifact, TagName tagName) throws TskCoreException {
462  return addBlackboardArtifactTag(artifact, tagName, "");
463  }
464 
479  public BlackboardArtifactTag addBlackboardArtifactTag(BlackboardArtifact artifact, TagName tagName, String comment) throws TskCoreException {
480  BlackboardArtifactTag tag = caseDb.addBlackboardArtifactTag(artifact, tagName, comment);
481  try {
483  } catch (NoCurrentCaseException ex) {
484  throw new TskCoreException("Added a tag to a closed case", ex);
485  }
486  return tag;
487  }
488 
497  public void deleteBlackboardArtifactTag(BlackboardArtifactTag tag) throws TskCoreException {
498  caseDb.deleteBlackboardArtifactTag(tag);
499  try {
501  } catch (NoCurrentCaseException ex) {
502  throw new TskCoreException("Deleted a tag from a closed case", ex);
503  }
504  }
505 
514  public List<BlackboardArtifactTag> getAllBlackboardArtifactTags() throws TskCoreException {
515  return caseDb.getAllBlackboardArtifactTags();
516  }
517 
530  public long getBlackboardArtifactTagsCountByTagName(TagName tagName) throws TskCoreException {
531  return caseDb.getBlackboardArtifactTagsCountByTagName(tagName);
532  }
533 
544  public BlackboardArtifactTag getBlackboardArtifactTagByTagID(long tagId) throws TskCoreException {
545  return caseDb.getBlackboardArtifactTagByID(tagId);
546  }
547 
561  public List<BlackboardArtifactTag> getBlackboardArtifactTagsByTagName(TagName tagName) throws TskCoreException {
562  return caseDb.getBlackboardArtifactTagsByTagName(tagName);
563  }
564 
576  public List<BlackboardArtifactTag> getBlackboardArtifactTagsByArtifact(BlackboardArtifact artifact) throws TskCoreException {
577  return caseDb.getBlackboardArtifactTagsByArtifact(artifact);
578  }
579 
583  public static class TagNameAlreadyExistsException extends Exception {
584 
585  private static final long serialVersionUID = 1L;
586  }
587 
598  @Deprecated
599  public boolean tagNameExists(String tagDisplayName) {
600  try {
601  Map<String, TagName> tagNames = getDisplayNamesToTagNamesMap();
602  return tagNames.containsKey(tagDisplayName) && (tagNames.get(tagDisplayName) != null);
603  } catch (TskCoreException ex) {
604  LOGGER.log(Level.SEVERE, "Error querying case database for tag names", ex);
605  return false;
606  }
607  }
608 
615  @Deprecated
616  @Override
617  public void close() throws IOException {
618  }
619 
620 }
void notifyContentTagDeleted(ContentTag deletedTag)
Definition: Case.java:1504
void notifyBlackBoardArtifactTagDeleted(BlackboardArtifactTag deletedTag)
Definition: Case.java:1538
synchronized TagName addTagName(String displayName)
List< ContentTag > getContentTagsByContent(Content content)
BlackboardArtifactTag addBlackboardArtifactTag(BlackboardArtifact artifact, TagName tagName)
synchronized TagName addTagName(String displayName, String description, TagName.HTML_COLOR color)
static boolean containsIllegalCharacters(String tagDisplayName)
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:1527
List< BlackboardArtifactTag > getBlackboardArtifactTagsByTagName(TagName tagName)
synchronized static Logger getLogger(String name)
Definition: Logger.java:124
void notifyContentTagAdded(ContentTag newTag)
Definition: Case.java:1493
List< ContentTag > getContentTagsByTagName(TagName tagName)
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-2016 Basis Technology. Generated on: Mon Jun 18 2018
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.