19 package org.sleuthkit.autopsy.casemodule.services;
21 import java.util.ArrayList;
22 import java.util.Arrays;
23 import java.util.Collection;
24 import java.util.Collections;
25 import java.util.HashSet;
26 import java.util.List;
27 import java.util.Objects;
29 import java.util.logging.Level;
30 import javax.annotation.concurrent.Immutable;
31 import org.openide.util.NbBundle.Messages;
49 "TagNameDefinition.predefTagNames.bookmark.text=Bookmark",
50 "TagNameDefinition.predefTagNames.followUp.text=Follow Up",
51 "TagNameDefinition.predefTagNames.notableItem.text=Notable Item",})
60 private final TagName.HTML_COLOR
color;
67 STANDARD_TAGS_DEFINITIONS.add(
new TagNameDefinition(Bundle.TagNameDefinition_predefTagNames_bookmark_text(),
"", TagName.HTML_COLOR.NONE, TskData.FileKnown.UNKNOWN));
68 STANDARD_TAGS_DEFINITIONS.add(
new TagNameDefinition(Bundle.TagNameDefinition_predefTagNames_followUp_text(),
"", TagName.HTML_COLOR.NONE, TskData.FileKnown.UNKNOWN));
69 STANDARD_TAGS_DEFINITIONS.add(
new TagNameDefinition(Bundle.TagNameDefinition_predefTagNames_notableItem_text(),
"", TagName.HTML_COLOR.NONE, TskData.FileKnown.BAD));
71 PROJECT_VIC_NAMES_NO_LONGER_USED.add(
"CAT-1: Child Exploitation (Illegal)");
72 PROJECT_VIC_NAMES_NO_LONGER_USED.add(
"CAT-2: Child Exploitation (Non-Illegal/Age Difficult)");
73 PROJECT_VIC_NAMES_NO_LONGER_USED.add(
"CAT-3: CGI/Animation (Child Exploitive)");
74 PROJECT_VIC_NAMES_NO_LONGER_USED.add(
"CAT-4: Exemplar/Comparison (Internal Use Only)");
75 PROJECT_VIC_NAMES_NO_LONGER_USED.add(
"CAT-5: Non-pertinent");
76 PROJECT_VIC_NAMES_NO_LONGER_USED.add(
"CAT-0: Uncategorized");
88 public TagNameDefinition(String displayName, String description, TagName.HTML_COLOR
color, TskData.FileKnown status) {
95 static Collection<TagNameDefinition> getStandardTagNameDefinitions() {
96 return Collections.unmodifiableCollection(STANDARD_TAGS_DEFINITIONS);
99 static List<String> getStandardTagNames() {
100 List<String> strList =
new ArrayList<>();
103 strList.add(def.getDisplayName());
114 static String getBookmarkTagDisplayName() {
115 return Bundle.TagNameDefinition_predefTagNames_bookmark_text();
123 static String getFollowUpTagDisplayName() {
124 return Bundle.TagNameDefinition_predefTagNames_followUp_text();
132 static String getNotableTagDisplayName() {
133 return Bundle.TagNameDefinition_predefTagNames_notableItem_text();
196 hash = 83 * hash + Objects.hashCode(this.displayName);
215 return sameName && sameStatus;
233 return displayName +
"," + description +
"," +
color.name() +
"," +
knownStatus.toString();
236 TagName saveToCase(SleuthkitCase caseDb) {
237 TagName tagName = null;
239 tagName = caseDb.getTaggingManager().addOrUpdateTagName(displayName, description,
color,
knownStatus);
240 }
catch (TskCoreException ex) {
241 LOGGER.log(Level.SEVERE,
"Error saving tag name definition", ex);
260 static synchronized Set<TagNameDefinition> getTagNameDefinitions() {
265 String tagsProperty = ModuleSettings.getConfigSetting(
TAGS_SETTINGS_NAME, TAG_NAMES_SETTING_KEY);
266 if (tagsProperty == null || tagsProperty.isEmpty()) {
267 return new HashSet<>();
270 List<String> individualTags = Arrays.asList(tagsProperty.split(
";"));
272 if (individualTags == null || individualTags.isEmpty()) {
273 return new HashSet<>();
276 Set<TagNameDefinition> definitions =
new HashSet<>();
277 for (String tagProps : individualTags) {
278 String[] attributes = tagProps.split(
",");
281 TagName.HTML_COLOR.valueOf(attributes[2]), TskData.FileKnown.valueOf(attributes[3])));
292 static synchronized void setTagNameDefinitions(Set<TagNameDefinition> tagNames) {
293 StringBuilder setting =
new StringBuilder();
295 if (setting.length() != 0) {
298 setting.append(tagName.toSettingsFormat());
300 SleuthkitCase caseDb = Case.getCurrentCaseThrows().getSleuthkitCase();
301 tagName.saveToCase(caseDb);
302 }
catch (NoCurrentCaseException ex) {
303 LOGGER.log(Level.SEVERE,
"Exception while getting open case.", ex);
307 ModuleSettings.setConfigSetting(
TAGS_SETTINGS_NAME, TAG_SETTING_VERSION_KEY, Integer.toString(TAG_SETTINGS_VERSION));
308 ModuleSettings.setConfigSetting(
TAGS_SETTINGS_NAME, TAG_NAMES_SETTING_KEY, setting.toString());
316 List<TagNameDefinition> definitions =
new ArrayList<>();
318 if (version == null) {
320 if (tagsProperty == null || tagsProperty.isEmpty()) {
325 List<String> individualTags = Arrays.asList(tagsProperty.split(
";"));
327 if (individualTags == null || individualTags.isEmpty()) {
331 List<String> notableTagList = null;
332 for (String tagProps : individualTags) {
333 String[] attributes = tagProps.split(
",");
334 TskData.FileKnown fileKnown = TskData.FileKnown.UNKNOWN;
335 if (attributes.length == 3) {
337 if (notableTagList == null) {
340 if (notableTagList.contains(attributes[0])) {
341 fileKnown = TskData.FileKnown.BAD;
345 fileKnown = TskData.FileKnown.valueOf(attributes[3]);
349 TagName.HTML_COLOR.valueOf(attributes[2]), fileKnown));
353 if (definitions.isEmpty()) {
358 List<String> tagStringsToKeep =
new ArrayList<>();
359 List<String> standardTags = getStandardTagNames();
361 if (!standardTags.contains(def.getDisplayName())
362 && !PROJECT_VIC_NAMES_NO_LONGER_USED.contains(def.getDisplayName())) {
363 tagStringsToKeep.add(def.toSettingsFormat());
379 if (notableTagsProp != null && !notableTagsProp.isEmpty()) {
380 return Arrays.asList(notableTagsProp.split(
","));
383 return new ArrayList<>();
405 if (version == null || version.isEmpty()) {
410 return Integer.parseInt(version);
411 }
catch (NumberFormatException ex) {
static synchronized String getConfigSetting(String moduleName, String settingName)
static final String TAG_NAMES_SETTING_KEY
static final String TAGS_SETTINGS_NAME
static final List< TagNameDefinition > STANDARD_TAGS_DEFINITIONS
static List< String > getCRNotableList()
static final String TAG_SETTING_VERSION_KEY
static void updatePropertyFile()
static final int TAG_SETTINGS_VERSION
String toSettingsFormat()
TskData.FileKnown getKnownStatus()
TagNameDefinition(String displayName, String description, TagName.HTML_COLOR color, TskData.FileKnown status)
final TskData.FileKnown knownStatus
static final List< String > PROJECT_VIC_NAMES_NO_LONGER_USED
boolean equals(Object obj)
static Integer getPropertyFileVersion()
final TagName.HTML_COLOR color
TagName.HTML_COLOR getColor()
static synchronized void setConfigSetting(String moduleName, String settingName, String settingVal)
static final Logger LOGGER
synchronized static Logger getLogger(String name)
int compareTo(TagNameDefinition other)
static boolean needsVersionUpdate()