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",})
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");
105 static Collection<TagNameDefinition> getStandardTagNameDefinitions() {
106 return Collections.unmodifiableCollection(STANDARD_TAGS_DEFINITIONS);
109 static List<String> getStandardTagNames() {
110 List<String> strList =
new ArrayList<>();
113 strList.add(def.getDisplayName());
124 static String getBookmarkTagDisplayName() {
125 return Bundle.TagNameDefinition_predefTagNames_bookmark_text();
133 static String getFollowUpTagDisplayName() {
134 return Bundle.TagNameDefinition_predefTagNames_followUp_text();
142 static String getNotableTagDisplayName() {
143 return Bundle.TagNameDefinition_predefTagNames_notableItem_text();
217 hash = 83 * hash + Objects.hashCode(this.displayName);
236 return sameName && sameStatus;
254 return displayName +
"," + description +
"," +
color.name() +
"," +
tagType.toString();
262 LOGGER.log(Level.SEVERE,
"Error saving tag name definition", ex);
281 static synchronized Set<TagNameDefinition> getTagNameDefinitions() {
286 String tagsProperty = ModuleSettings.getConfigSetting(
TAGS_SETTINGS_NAME, TAG_NAMES_SETTING_KEY);
287 if (tagsProperty == null || tagsProperty.isEmpty()) {
288 return new HashSet<>();
291 List<String> individualTags = Arrays.asList(tagsProperty.split(
";"));
293 if (individualTags == null || individualTags.isEmpty()) {
294 return new HashSet<>();
297 Set<TagNameDefinition> definitions =
new HashSet<>();
298 for (String tagProps : individualTags) {
299 String[] attributes = tagProps.split(
",");
302 TagName.HTML_COLOR.valueOf(attributes[2]), TskData.TagType.valueOf(attributes[3])));
313 static synchronized void setTagNameDefinitions(Set<TagNameDefinition> tagNames) {
314 StringBuilder setting =
new StringBuilder();
316 if (setting.length() != 0) {
319 setting.append(tagName.toSettingsFormat());
321 SleuthkitCase caseDb = Case.getCurrentCaseThrows().getSleuthkitCase();
322 tagName.saveToCase(caseDb);
323 }
catch (NoCurrentCaseException ex) {
324 LOGGER.log(Level.SEVERE,
"Exception while getting open case.", ex);
328 ModuleSettings.setConfigSetting(
TAGS_SETTINGS_NAME, TAG_SETTING_VERSION_KEY, Integer.toString(TAG_SETTINGS_VERSION));
329 ModuleSettings.setConfigSetting(
TAGS_SETTINGS_NAME, TAG_NAMES_SETTING_KEY, setting.toString());
337 List<TagNameDefinition> definitions =
new ArrayList<>();
339 if (version == null || version == 1) {
341 if (tagsProperty == null || tagsProperty.isEmpty()) {
346 List<String> individualTags = Arrays.asList(tagsProperty.split(
";"));
348 if (individualTags == null || individualTags.isEmpty()) {
352 List<String> notableTagList = null;
353 for (String tagProps : individualTags) {
354 String[] attributes = tagProps.split(
",");
356 if (attributes.length == 3) {
358 if (notableTagList == null) {
361 if (notableTagList.contains(attributes[0])) {
379 if (definitions.isEmpty()) {
384 List<String> tagStringsToKeep =
new ArrayList<>();
385 List<String> standardTags = getStandardTagNames();
387 if (!standardTags.contains(def.getDisplayName())
388 && !PROJECT_VIC_NAMES_NO_LONGER_USED.contains(def.getDisplayName())) {
389 tagStringsToKeep.add(def.toSettingsFormat());
405 if (notableTagsProp != null && !notableTagsProp.isEmpty()) {
406 return Arrays.asList(notableTagsProp.split(
","));
409 return new ArrayList<>();
431 if (version == null || version.isEmpty()) {
436 return Integer.parseInt(version);
437 }
catch (NumberFormatException ex) {
static synchronized String getConfigSetting(String moduleName, String settingName)
static FileKnown valueOf(byte known)
static final String TAG_NAMES_SETTING_KEY
TagName addOrUpdateTagName(String displayName, String description, TagName.HTML_COLOR color, TskData.FileKnown knownStatus)
final TskData.TagType tagType
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)
static final List< String > PROJECT_VIC_NAMES_NO_LONGER_USED
boolean equals(Object obj)
synchronized TaggingManager getTaggingManager()
static Integer getPropertyFileVersion()
final TagName.HTML_COLOR color
TagName.HTML_COLOR getColor()
static TagType valueOf(byte type)
static synchronized void setConfigSetting(String moduleName, String settingName, String settingVal)
TskData.TagType getTagType()
static FileKnown convertTagTypeToFileKnown(TagType tagType)
static final Logger LOGGER
String getModuleSettingsKey()
TagNameDefinition(String displayName, String description, TagName.HTML_COLOR color, TskData.TagType status)
synchronized static Logger getLogger(String name)
int compareTo(TagNameDefinition other)
static boolean needsVersionUpdate()
static CentralRepoSettings getInstance()
static TagType convertFileKnownToTagType(FileKnown fileKnown)