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 OLD_CATEGORY_TAG_NAMES.add(
"CAT-1: Child Exploitation (Illegal)");
72 OLD_CATEGORY_TAG_NAMES.add(
"CAT-2: Child Exploitation (Non-Illegal/Age Difficult)");
73 OLD_CATEGORY_TAG_NAMES.add(
"CAT-3: CGI/Animation (Child Exploitive)");
74 OLD_CATEGORY_TAG_NAMES.add(
"CAT-4: Exemplar/Comparison (Internal Use Only)");
75 OLD_CATEGORY_TAG_NAMES.add(
"CAT-5: Non-pertinent");
76 OLD_CATEGORY_TAG_NAMES.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.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> tagStrings =
new ArrayList<>();
359 List<String> standardTags = getStandardTagNames();
361 if (!standardTags.contains(def.getDisplayName())
362 && !OLD_CATEGORY_TAG_NAMES.contains(def.getDisplayName())) {
363 tagStrings.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 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
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
static void updateTagDefinitions()
synchronized static Logger getLogger(String name)
int compareTo(TagNameDefinition other)
static boolean needsVersionUpdate()
static final List< String > OLD_CATEGORY_TAG_NAMES