Autopsy  4.6.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 
130  TagsManager(SleuthkitCase caseDb) {
131  this.caseDb = caseDb;
132  for (TagNameDefinition tagName : TagNameDefinition.getTagNameDefinitions()) {
133  tagName.saveToCase(caseDb);
134  }
135  }
136 
144  public List<TagName> getAllTagNames() throws TskCoreException {
145  return caseDb.getAllTagNames();
146  }
147 
156  public List<TagName> getTagNamesInUse() throws TskCoreException {
157  return caseDb.getTagNamesInUse();
158  }
159 
173  public Map<String, TagName> getDisplayNamesToTagNamesMap() throws TskCoreException {
186  Map<String, TagName> tagNames = new HashMap<>();
187  Set<TagNameDefinition> customTypes = TagNameDefinition.getTagNameDefinitions();
188  for (TagNameDefinition tagType : customTypes) {
189  tagNames.put(tagType.getDisplayName(), null);
190  }
191  for (TagName tagName : caseDb.getAllTagNames()) {
192  tagNames.put(tagName.getDisplayName(), tagName);
193  }
194  return new HashMap<>(tagNames);
195  }
196 
211  public synchronized TagName addTagName(String displayName) throws TagNameAlreadyExistsException, TskCoreException {
212  return addTagName(displayName, "", TagName.HTML_COLOR.NONE, TskData.FileKnown.UNKNOWN);
213  }
214 
230  public synchronized TagName addTagName(String displayName, String description) throws TagNameAlreadyExistsException, TskCoreException {
231  return addTagName(displayName, description, TagName.HTML_COLOR.NONE, TskData.FileKnown.UNKNOWN);
232  }
233 
249  public synchronized TagName addTagName(String displayName, String description, TagName.HTML_COLOR color) throws TagNameAlreadyExistsException, TskCoreException {
250  return addTagName(displayName, description, color, TskData.FileKnown.UNKNOWN);
251  }
252 
270  public synchronized TagName addTagName(String displayName, String description, TagName.HTML_COLOR color, TskData.FileKnown knownStatus) throws TagNameAlreadyExistsException, TskCoreException {
271  try {
272  TagName tagName = caseDb.addOrUpdateTagName(displayName, description, color, knownStatus);
273  Set<TagNameDefinition> customTypes = TagNameDefinition.getTagNameDefinitions();
274  customTypes.add(new TagNameDefinition(displayName, description, color, knownStatus));
275  TagNameDefinition.setTagNameDefinitions(customTypes);
276  return tagName;
277  } catch (TskCoreException ex) {
278  List<TagName> existingTagNames = caseDb.getAllTagNames();
279  for (TagName tagName : existingTagNames) {
280  if (tagName.getDisplayName().equals(displayName)) {
281  throw new TagNameAlreadyExistsException();
282  }
283  }
284  throw ex;
285  }
286  }
287 
301  public ContentTag addContentTag(Content content, TagName tagName) throws TskCoreException {
302  return addContentTag(content, tagName, "", -1, -1);
303  }
304 
319  public ContentTag addContentTag(Content content, TagName tagName, String comment) throws TskCoreException {
320  return addContentTag(content, tagName, comment, -1, -1);
321  }
322 
339  public ContentTag addContentTag(Content content, TagName tagName, String comment, long beginByteOffset, long endByteOffset) throws TskCoreException {
340  ContentTag tag;
341  tag = caseDb.addContentTag(content, tagName, comment, beginByteOffset, endByteOffset);
342  try {
344  } catch (NoCurrentCaseException ex) {
345  throw new TskCoreException("Added a tag to a closed case", ex);
346  }
347  return tag;
348  }
349 
358  public void deleteContentTag(ContentTag tag) throws TskCoreException {
359  caseDb.deleteContentTag(tag);
360  try {
362  } catch (NoCurrentCaseException ex) {
363  throw new TskCoreException("Deleted a tag from a closed case", ex);
364  }
365  }
366 
375  public List<ContentTag> getAllContentTags() throws TskCoreException {
376  return caseDb.getAllContentTags();
377  }
378 
391  public long getContentTagsCountByTagName(TagName tagName) throws TskCoreException {
392  return caseDb.getContentTagsCountByTagName(tagName);
393  }
394 
405  public ContentTag getContentTagByTagID(long tagId) throws TskCoreException {
406  return caseDb.getContentTagByID(tagId);
407  }
408 
420  public List<ContentTag> getContentTagsByTagName(TagName tagName) throws TskCoreException {
421  return caseDb.getContentTagsByTagName(tagName);
422  }
423 
435  public List<ContentTag> getContentTagsByContent(Content content) throws TskCoreException {
436  return caseDb.getContentTagsByContent(content);
437  }
438 
452  public BlackboardArtifactTag addBlackboardArtifactTag(BlackboardArtifact artifact, TagName tagName) throws TskCoreException {
453  return addBlackboardArtifactTag(artifact, tagName, "");
454  }
455 
470  public BlackboardArtifactTag addBlackboardArtifactTag(BlackboardArtifact artifact, TagName tagName, String comment) throws TskCoreException {
471  BlackboardArtifactTag tag = caseDb.addBlackboardArtifactTag(artifact, tagName, comment);
472  try {
474  } catch (NoCurrentCaseException ex) {
475  throw new TskCoreException("Added a tag to a closed case", ex);
476  }
477  return tag;
478  }
479 
488  public void deleteBlackboardArtifactTag(BlackboardArtifactTag tag) throws TskCoreException {
489  caseDb.deleteBlackboardArtifactTag(tag);
490  try {
492  } catch (NoCurrentCaseException ex) {
493  throw new TskCoreException("Deleted a tag from a closed case", ex);
494  }
495  }
496 
505  public List<BlackboardArtifactTag> getAllBlackboardArtifactTags() throws TskCoreException {
506  return caseDb.getAllBlackboardArtifactTags();
507  }
508 
521  public long getBlackboardArtifactTagsCountByTagName(TagName tagName) throws TskCoreException {
522  return caseDb.getBlackboardArtifactTagsCountByTagName(tagName);
523  }
524 
535  public BlackboardArtifactTag getBlackboardArtifactTagByTagID(long tagId) throws TskCoreException {
536  return caseDb.getBlackboardArtifactTagByID(tagId);
537  }
538 
552  public List<BlackboardArtifactTag> getBlackboardArtifactTagsByTagName(TagName tagName) throws TskCoreException {
553  return caseDb.getBlackboardArtifactTagsByTagName(tagName);
554  }
555 
567  public List<BlackboardArtifactTag> getBlackboardArtifactTagsByArtifact(BlackboardArtifact artifact) throws TskCoreException {
568  return caseDb.getBlackboardArtifactTagsByArtifact(artifact);
569  }
570 
574  public static class TagNameAlreadyExistsException extends Exception {
575 
576  private static final long serialVersionUID = 1L;
577  }
578 
589  @Deprecated
590  public boolean tagNameExists(String tagDisplayName) {
591  try {
592  Map<String, TagName> tagNames = getDisplayNamesToTagNamesMap();
593  return tagNames.containsKey(tagDisplayName) && (tagNames.get(tagDisplayName) != null);
594  } catch (TskCoreException ex) {
595  LOGGER.log(Level.SEVERE, "Error querying case database for tag names", ex);
596  return false;
597  }
598  }
599 
606  @Deprecated
607  @Override
608  public void close() throws IOException {
609  }
610 
611 }
void notifyContentTagDeleted(ContentTag deletedTag)
Definition: Case.java:1500
void notifyBlackBoardArtifactTagDeleted(BlackboardArtifactTag deletedTag)
Definition: Case.java:1534
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:1523
List< BlackboardArtifactTag > getBlackboardArtifactTagsByTagName(TagName tagName)
synchronized static Logger getLogger(String name)
Definition: Logger.java:124
void notifyContentTagAdded(ContentTag newTag)
Definition: Case.java:1489
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 May 7 2018
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.