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;
50 "TagNameDefinition.predefTagNames.bookmark.text=Bookmark",
51 "TagNameDefinition.predefTagNames.followUp.text=Follow Up",
52 "TagNameDefinition.predefTagNames.notableItem.text=Notable Item",})
61 private final TagName.HTML_COLOR
color;
68 STANDARD_TAGS_DEFINITIONS.add(
new TagNameDefinition(Bundle.TagNameDefinition_predefTagNames_bookmark_text(),
"", TagName.HTML_COLOR.NONE, TskData.FileKnown.UNKNOWN));
69 STANDARD_TAGS_DEFINITIONS.add(
new TagNameDefinition(Bundle.TagNameDefinition_predefTagNames_followUp_text(),
"", TagName.HTML_COLOR.NONE, TskData.FileKnown.UNKNOWN));
70 STANDARD_TAGS_DEFINITIONS.add(
new TagNameDefinition(Bundle.TagNameDefinition_predefTagNames_notableItem_text(),
"", TagName.HTML_COLOR.NONE, TskData.FileKnown.BAD));
72 PROJECT_VIC_NAMES_NO_LONGER_USED.add(
"CAT-1: Child Exploitation (Illegal)");
73 PROJECT_VIC_NAMES_NO_LONGER_USED.add(
"CAT-2: Child Exploitation (Non-Illegal/Age Difficult)");
74 PROJECT_VIC_NAMES_NO_LONGER_USED.add(
"CAT-3: CGI/Animation (Child Exploitive)");
75 PROJECT_VIC_NAMES_NO_LONGER_USED.add(
"CAT-4: Exemplar/Comparison (Internal Use Only)");
76 PROJECT_VIC_NAMES_NO_LONGER_USED.add(
"CAT-5: Non-pertinent");
77 PROJECT_VIC_NAMES_NO_LONGER_USED.add(
"CAT-0: Uncategorized");
89 public TagNameDefinition(String displayName, String description, TagName.HTML_COLOR
color, TskData.FileKnown status) {
96 static Collection<TagNameDefinition> getStandardTagNameDefinitions() {
97 return Collections.unmodifiableCollection(STANDARD_TAGS_DEFINITIONS);
100 static List<String> getStandardTagNames() {
101 List<String> strList =
new ArrayList<>();
104 strList.add(def.getDisplayName());
115 static String getBookmarkTagDisplayName() {
116 return Bundle.TagNameDefinition_predefTagNames_bookmark_text();
124 static String getFollowUpTagDisplayName() {
125 return Bundle.TagNameDefinition_predefTagNames_followUp_text();
133 static String getNotableTagDisplayName() {
134 return Bundle.TagNameDefinition_predefTagNames_notableItem_text();
197 hash = 83 * hash + Objects.hashCode(this.displayName);
216 return sameName && sameStatus;
234 return displayName +
"," + description +
"," +
color.name() +
"," +
knownStatus.toString();
237 TagName saveToCase(SleuthkitCase caseDb) {
238 TagName tagName = null;
240 tagName = caseDb.getTaggingManager().addOrUpdateTagName(displayName, description,
color,
knownStatus);
241 }
catch (TskCoreException ex) {
242 LOGGER.log(Level.SEVERE,
"Error saving tag name definition", ex);
261 static synchronized Set<TagNameDefinition> getTagNameDefinitions() {
266 String tagsProperty = ModuleSettings.getConfigSetting(
TAGS_SETTINGS_NAME, TAG_NAMES_SETTING_KEY);
267 if (tagsProperty == null || tagsProperty.isEmpty()) {
268 return new HashSet<>();
271 List<String> individualTags = Arrays.asList(tagsProperty.split(
";"));
273 if (individualTags == null || individualTags.isEmpty()) {
274 return new HashSet<>();
277 Set<TagNameDefinition> definitions =
new HashSet<>();
278 for (String tagProps : individualTags) {
279 String[] attributes = tagProps.split(
",");
282 TagName.HTML_COLOR.valueOf(attributes[2]), TskData.FileKnown.valueOf(attributes[3])));
293 static synchronized void setTagNameDefinitions(Set<TagNameDefinition> tagNames) {
294 StringBuilder setting =
new StringBuilder();
296 if (setting.length() != 0) {
299 setting.append(tagName.toSettingsFormat());
301 SleuthkitCase caseDb = Case.getCurrentCaseThrows().getSleuthkitCase();
302 tagName.saveToCase(caseDb);
303 }
catch (NoCurrentCaseException ex) {
304 LOGGER.log(Level.SEVERE,
"Exception while getting open case.", ex);
308 ModuleSettings.setConfigSetting(
TAGS_SETTINGS_NAME, TAG_SETTING_VERSION_KEY, Integer.toString(TAG_SETTINGS_VERSION));
309 ModuleSettings.setConfigSetting(
TAGS_SETTINGS_NAME, TAG_NAMES_SETTING_KEY, setting.toString());
317 List<TagNameDefinition> definitions =
new ArrayList<>();
319 if (version == null) {
321 if (tagsProperty == null || tagsProperty.isEmpty()) {
326 List<String> individualTags = Arrays.asList(tagsProperty.split(
";"));
328 if (individualTags == null || individualTags.isEmpty()) {
332 List<String> notableTagList = null;
333 for (String tagProps : individualTags) {
334 String[] attributes = tagProps.split(
",");
335 TskData.FileKnown fileKnown = TskData.FileKnown.UNKNOWN;
336 if (attributes.length == 3) {
338 if (notableTagList == null) {
341 if (notableTagList.contains(attributes[0])) {
342 fileKnown = TskData.FileKnown.BAD;
346 fileKnown = TskData.FileKnown.valueOf(attributes[3]);
350 TagName.HTML_COLOR.valueOf(attributes[2]), fileKnown));
354 if (definitions.isEmpty()) {
359 List<String> tagStringsToKeep =
new ArrayList<>();
360 List<String> standardTags = getStandardTagNames();
362 if (!standardTags.contains(def.getDisplayName())
363 && !PROJECT_VIC_NAMES_NO_LONGER_USED.contains(def.getDisplayName())) {
364 tagStringsToKeep.add(def.toSettingsFormat());
380 if (notableTagsProp != null && !notableTagsProp.isEmpty()) {
381 return Arrays.asList(notableTagsProp.split(
","));
384 return new ArrayList<>();
406 if (version == null || version.isEmpty()) {
411 return Integer.parseInt(version);
412 }
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
String getModuleSettingsKey()
synchronized static Logger getLogger(String name)
int compareTo(TagNameDefinition other)
static boolean needsVersionUpdate()
static CentralRepoSettings getInstance()