Autopsy  4.4.1
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-2017 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.Arrays;
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;
33 import org.sleuthkit.datamodel.BlackboardArtifact;
34 import org.sleuthkit.datamodel.BlackboardArtifactTag;
35 import org.sleuthkit.datamodel.Content;
36 import org.sleuthkit.datamodel.ContentTag;
37 import org.sleuthkit.datamodel.SleuthkitCase;
38 import org.sleuthkit.datamodel.TagName;
39 import org.sleuthkit.datamodel.TskCoreException;
40 
45 public class TagsManager implements Closeable {
46 
47  private static final Logger LOGGER = Logger.getLogger(TagsManager.class.getName());
48  @NbBundle.Messages("TagsManager.predefTagNames.bookmark.text=Bookmark")
49  private static final Set<String> STANDARD_TAG_DISPLAY_NAMES = new HashSet<>(Arrays.asList(Bundle.TagsManager_predefTagNames_bookmark_text()));
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 
85  public static Set<String> getTagDisplayNames() throws TskCoreException {
86  Set<String> tagDisplayNames = new HashSet<>(STANDARD_TAG_DISPLAY_NAMES);
87  Set<TagNameDefiniton> customNames = TagNameDefiniton.getTagNameDefinitions();
88  customNames.forEach((tagType) -> {
89  tagDisplayNames.add(tagType.getDisplayName());
90  });
91  try {
93  for (TagName tagName : tagsManager.getAllTagNames()) {
94  tagDisplayNames.add(tagName.getDisplayName());
95  }
96  } catch (IllegalStateException ignored) {
97  /*
98  * No current case, nothing more to add to the set.
99  */
100  }
101  return tagDisplayNames;
102  }
103 
110  TagsManager(SleuthkitCase caseDb) {
111  this.caseDb = caseDb;
112  }
113 
121  public List<TagName> getAllTagNames() throws TskCoreException {
122  return caseDb.getAllTagNames();
123  }
124 
133  public List<TagName> getTagNamesInUse() throws TskCoreException {
134  return caseDb.getTagNamesInUse();
135  }
136 
150  public Map<String, TagName> getDisplayNamesToTagNamesMap() throws TskCoreException {
163  Map<String, TagName> tagNames = new HashMap<>();
164  Set<TagNameDefiniton> customTypes = TagNameDefiniton.getTagNameDefinitions();
165  for (TagNameDefiniton tagType : customTypes) {
166  tagNames.put(tagType.getDisplayName(), null);
167  }
168  for (TagName tagName : caseDb.getAllTagNames()) {
169  tagNames.put(tagName.getDisplayName(), tagName);
170  }
171  return new HashMap<>(tagNames);
172  }
173 
188  public synchronized TagName addTagName(String displayName) throws TagNameAlreadyExistsException, TskCoreException {
189  return addTagName(displayName, "", TagName.HTML_COLOR.NONE);
190  }
191 
207  public synchronized TagName addTagName(String displayName, String description) throws TagNameAlreadyExistsException, TskCoreException {
208  return addTagName(displayName, description, TagName.HTML_COLOR.NONE);
209  }
210 
226  public synchronized TagName addTagName(String displayName, String description, TagName.HTML_COLOR color) throws TagNameAlreadyExistsException, TskCoreException {
227  try {
228  TagName tagName = caseDb.addTagName(displayName, description, color);
229  if (!STANDARD_TAG_DISPLAY_NAMES.contains(displayName)) {
230  Set<TagNameDefiniton> customTypes = TagNameDefiniton.getTagNameDefinitions();
231  customTypes.add(new TagNameDefiniton(displayName, description, color));
232  TagNameDefiniton.setTagNameDefinitions(customTypes);
233  }
234  return tagName;
235  } catch (TskCoreException ex) {
236  List<TagName> existingTagNames = caseDb.getAllTagNames();
237  for (TagName tagName : existingTagNames) {
238  if (tagName.getDisplayName().equals(displayName)) {
239  throw new TagNameAlreadyExistsException();
240  }
241  }
242  throw ex;
243  }
244  }
245 
259  public ContentTag addContentTag(Content content, TagName tagName) throws TskCoreException {
260  return addContentTag(content, tagName, "", -1, -1);
261  }
262 
277  public ContentTag addContentTag(Content content, TagName tagName, String comment) throws TskCoreException {
278  return addContentTag(content, tagName, comment, -1, -1);
279  }
280 
297  public ContentTag addContentTag(Content content, TagName tagName, String comment, long beginByteOffset, long endByteOffset) throws TskCoreException {
298  ContentTag tag;
299  tag = caseDb.addContentTag(content, tagName, comment, beginByteOffset, endByteOffset);
300  try {
302  } catch (IllegalStateException ex) {
303  throw new TskCoreException("Added a tag to a closed case", ex);
304  }
305  return tag;
306  }
307 
316  public void deleteContentTag(ContentTag tag) throws TskCoreException {
317  caseDb.deleteContentTag(tag);
318  try {
320  } catch (IllegalStateException ex) {
321  throw new TskCoreException("Deleted a tag from a closed case", ex);
322  }
323  }
324 
333  public List<ContentTag> getAllContentTags() throws TskCoreException {
334  return caseDb.getAllContentTags();
335  }
336 
349  public long getContentTagsCountByTagName(TagName tagName) throws TskCoreException {
350  return caseDb.getContentTagsCountByTagName(tagName);
351  }
352 
363  public ContentTag getContentTagByTagID(long tagId) throws TskCoreException {
364  return caseDb.getContentTagByID(tagId);
365  }
366 
378  public List<ContentTag> getContentTagsByTagName(TagName tagName) throws TskCoreException {
379  return caseDb.getContentTagsByTagName(tagName);
380  }
381 
393  public List<ContentTag> getContentTagsByContent(Content content) throws TskCoreException {
394  return caseDb.getContentTagsByContent(content);
395  }
396 
410  public BlackboardArtifactTag addBlackboardArtifactTag(BlackboardArtifact artifact, TagName tagName) throws TskCoreException {
411  return addBlackboardArtifactTag(artifact, tagName, "");
412  }
413 
428  public BlackboardArtifactTag addBlackboardArtifactTag(BlackboardArtifact artifact, TagName tagName, String comment) throws TskCoreException {
429  BlackboardArtifactTag tag = caseDb.addBlackboardArtifactTag(artifact, tagName, comment);
430  try {
432  } catch (IllegalStateException ex) {
433  throw new TskCoreException("Added a tag to a closed case", ex);
434  }
435  return tag;
436  }
437 
446  public void deleteBlackboardArtifactTag(BlackboardArtifactTag tag) throws TskCoreException {
447  caseDb.deleteBlackboardArtifactTag(tag);
448  try {
450  } catch (IllegalStateException ex) {
451  throw new TskCoreException("Deleted a tag from a closed case", ex);
452  }
453  }
454 
463  public List<BlackboardArtifactTag> getAllBlackboardArtifactTags() throws TskCoreException {
464  return caseDb.getAllBlackboardArtifactTags();
465  }
466 
479  public long getBlackboardArtifactTagsCountByTagName(TagName tagName) throws TskCoreException {
480  return caseDb.getBlackboardArtifactTagsCountByTagName(tagName);
481  }
482 
493  public BlackboardArtifactTag getBlackboardArtifactTagByTagID(long tagId) throws TskCoreException {
494  return caseDb.getBlackboardArtifactTagByID(tagId);
495  }
496 
510  public List<BlackboardArtifactTag> getBlackboardArtifactTagsByTagName(TagName tagName) throws TskCoreException {
511  return caseDb.getBlackboardArtifactTagsByTagName(tagName);
512  }
513 
525  public List<BlackboardArtifactTag> getBlackboardArtifactTagsByArtifact(BlackboardArtifact artifact) throws TskCoreException {
526  return caseDb.getBlackboardArtifactTagsByArtifact(artifact);
527  }
528 
532  public static class TagNameAlreadyExistsException extends Exception {
533 
534  private static final long serialVersionUID = 1L;
535  }
536 
547  @Deprecated
548  public boolean tagNameExists(String tagDisplayName) {
549  try {
550  Map<String, TagName> tagNames = getDisplayNamesToTagNamesMap();
551  return tagNames.containsKey(tagDisplayName) && (tagNames.get(tagDisplayName) != null);
552  } catch (TskCoreException ex) {
553  LOGGER.log(Level.SEVERE, "Error querying case database for tag names", ex);
554  return false;
555  }
556  }
557 
564  @Deprecated
565  @Override
566  public void close() throws IOException {
567  }
568 
569 }
void notifyContentTagDeleted(ContentTag deletedTag)
Definition: Case.java:1401
void notifyBlackBoardArtifactTagDeleted(BlackboardArtifactTag deletedTag)
Definition: Case.java:1423
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:1412
List< BlackboardArtifactTag > getBlackboardArtifactTagsByTagName(TagName tagName)
synchronized static Logger getLogger(String name)
Definition: Logger.java:161
void notifyContentTagAdded(ContentTag newTag)
Definition: Case.java:1390
List< ContentTag > getContentTagsByTagName(TagName tagName)
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: Fri Sep 29 2017
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.