19 package org.sleuthkit.autopsy.datamodel;
21 import com.google.common.annotations.Beta;
22 import com.google.common.cache.Cache;
23 import com.google.common.cache.CacheBuilder;
24 import java.beans.PropertyChangeEvent;
25 import java.beans.PropertyChangeListener;
26 import java.lang.ref.WeakReference;
27 import java.text.MessageFormat;
28 import java.util.ArrayList;
29 import java.util.Arrays;
30 import java.util.EnumSet;
31 import java.util.LinkedHashMap;
32 import java.util.List;
34 import java.util.MissingResourceException;
36 import java.util.concurrent.ExecutionException;
37 import java.util.concurrent.TimeUnit;
38 import java.util.logging.Level;
39 import java.util.stream.Collectors;
40 import javax.swing.Action;
41 import org.apache.commons.lang3.StringUtils;
42 import org.apache.commons.lang3.tuple.Pair;
43 import org.openide.nodes.Sheet;
44 import org.openide.util.Lookup;
45 import org.openide.util.NbBundle;
46 import org.openide.util.WeakListeners;
47 import org.openide.util.lookup.Lookups;
72 import org.
sleuthkit.datamodel.BlackboardArtifact.ARTIFACT_TYPE;
74 import org.
sleuthkit.datamodel.BlackboardAttribute.ATTRIBUTE_TYPE;
98 private static final Cache<Long, Content>
contentCache = CacheBuilder.newBuilder().expireAfterWrite(1, TimeUnit.MINUTES).build();
117 BlackboardArtifact.ARTIFACT_TYPE.TSK_HASHSET_HIT.getTypeID(),
118 BlackboardArtifact.ARTIFACT_TYPE.TSK_KEYWORD_HIT.getTypeID(),
119 BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT.getTypeID(),
120 BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_ARTIFACT_HIT.getTypeID()
128 BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_FILE_HIT.getTypeID()
142 private final PropertyChangeListener
listener =
new PropertyChangeListener() {
144 public void propertyChange(PropertyChangeEvent evt) {
145 String eventType = evt.getPropertyName();
148 if (event.getAddedTag().getArtifact().equals(artifact)) {
153 if (event.getDeletedTagInfo().getArtifactID() == artifact.getArtifactID()) {
158 if (event.getAddedTag().getContent().equals(srcContent)) {
163 if (event.getDeletedTagInfo().getContentID() == srcContent.getId()) {
168 if (event.getContentID() == srcContent.getId()) {
172 if (evt.getNewValue() == null) {
177 contentCache.invalidateAll();
180 SCOData scoData = (SCOData) evt.getNewValue();
181 if (scoData.getScoreAndDescription() != null) {
183 Bundle.BlackboardArtifactNode_createSheet_score_name(),
184 Bundle.BlackboardArtifactNode_createSheet_score_displayName(),
185 scoData.getScoreAndDescription().getRight(),
186 scoData.getScoreAndDescription().getLeft()));
188 if (scoData.getComment() != null) {
190 Bundle.BlackboardArtifactNode_createSheet_comment_name(),
191 Bundle.BlackboardArtifactNode_createSheet_comment_displayName(),
194 if (scoData.getCountAndDescription() != null) {
196 Bundle.BlackboardArtifactNode_createSheet_count_name(),
197 Bundle.BlackboardArtifactNode_createSheet_count_displayName(),
198 scoData.getCountAndDescription().getRight(),
199 scoData.getCountAndDescription().getLeft()));
208 String originalName = evt.getOldValue().toString();
209 translatedSourceName = evt.getNewValue().toString();
210 setDisplayName(translatedSourceName);
211 setShortDescription(originalName);
213 Bundle.BlackboardArtifactNode_createSheet_srcFile_origName(),
214 Bundle.BlackboardArtifactNode_createSheet_srcFile_origDisplayName(),
228 private final PropertyChangeListener
weakListener = WeakListeners.propertyChange(listener, null);
240 for (Content lookupContent : this.getLookup().lookupAll(Content.class)) {
241 if ((lookupContent != null) && (!(lookupContent instanceof BlackboardArtifact))) {
242 srcContent = lookupContent;
250 srcContent.getUniquePath();
251 }
catch (TskCoreException ex) {
252 logger.log(Level.WARNING, MessageFormat.format(
"Error getting the unique path of the source content (artifact objID={0})", artifact.getId()), ex);
257 if (srcContent == null) {
258 throw new IllegalArgumentException(MessageFormat.format(
"Artifact missing source content (artifact objID={0})", artifact));
260 setName(Long.toString(artifact.getArtifactID()));
261 String displayName = srcContent.getName();
262 setDisplayName(displayName);
263 setShortDescription(displayName);
264 setIconBaseWithExtension(iconPath != null && iconPath.charAt(0) ==
'/' ? iconPath.substring(1) : iconPath);
279 super(artifact,
createLookup(artifact, lookupIsAssociatedFile));
283 srcContent = artifact.getParent();
284 }
catch (TskCoreException ex) {
285 logger.log(Level.WARNING, MessageFormat.format(
"Error getting the parent of the artifact for (artifact objID={0})", artifact.getId()), ex);
287 if (srcContent != null) {
295 srcContent.getUniquePath();
296 }
catch (TskCoreException ex) {
297 logger.log(Level.WARNING, MessageFormat.format(
"Error getting the unique path of the source content (artifact objID={0})", artifact.getId()), ex);
300 throw new IllegalArgumentException(MessageFormat.format(
"Artifact missing source content (artifact objID={0})", artifact));
302 setName(Long.toString(artifact.getArtifactID()));
303 String displayName = srcContent.getName();
304 setDisplayName(displayName);
305 setShortDescription(displayName);
307 setIconBaseWithExtension(iconPath != null && iconPath.charAt(0) ==
'/' ? iconPath.substring(1) : iconPath);
330 final long objectID = artifact.getObjectID();
332 Content content = contentCache.get(objectID, () -> artifact.getSleuthkitCase().getContentById(objectID));
333 if (content == null) {
334 return Lookups.fixed(artifact);
336 return Lookups.fixed(artifact, content);
338 }
catch (ExecutionException ex) {
339 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting source content (artifact objID={0}", artifact.getId()), ex);
340 return Lookups.fixed(artifact);
355 private static Lookup
createLookup(BlackboardArtifact artifact,
boolean lookupIsAssociatedFile) {
356 Content content = null;
357 if (lookupIsAssociatedFile) {
360 }
catch (ExecutionException ex) {
361 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting source content (artifact objID={0}", artifact.getId()), ex);
364 if (content == null) {
365 return Lookups.fixed(artifact);
367 return Lookups.fixed(artifact, content);
388 private static Content
getPathIdFile(BlackboardArtifact artifact)
throws ExecutionException {
390 BlackboardAttribute attribute = artifact.getAttribute(
new BlackboardAttribute.Type(BlackboardAttribute.ATTRIBUTE_TYPE.TSK_PATH_ID));
391 if (attribute != null) {
392 return contentCache.get(attribute.getValueLong(), () -> artifact.getSleuthkitCase().getContentById(attribute.getValueLong()));
394 }
catch (TskCoreException ex) {
395 logger.log(Level.WARNING, MessageFormat.format(
"Error getting content for path id attrbiute for artifact: ", artifact.getId()), ex);
433 List<Action> actionsList =
new ArrayList<>();
434 actionsList.addAll(Arrays.asList(super.getActions(context)));
444 }
catch (TskCoreException ex) {
445 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting artifact timestamp (artifact objID={0})", artifact.getId()), ex);
454 AbstractFile linkedFile = findLinked(artifact);
455 if (linkedFile != null) {
458 }
catch (TskCoreException ex) {
459 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting linked file of artifact (artifact objID={0})", artifact.getId()), ex);
467 AbstractFile file = getLookup().lookup(AbstractFile.class
473 return actionsList.toArray(
new Action[actionsList.size()]);
483 return srcContent.getName();
487 "BlackboardArtifactNode.createSheet.srcFile.name=Source File",
488 "BlackboardArtifactNode.createSheet.srcFile.displayName=Source File",
489 "BlackboardArtifactNode.createSheet.srcFile.origName=Original Name",
490 "BlackboardArtifactNode.createSheet.srcFile.origDisplayName=Original Name",
491 "BlackboardArtifactNode.createSheet.artifactType.displayName=Result Type",
492 "BlackboardArtifactNode.createSheet.artifactType.name=Result Type",
493 "BlackboardArtifactNode.createSheet.artifactDetails.displayName=Result Details",
494 "BlackboardArtifactNode.createSheet.artifactDetails.name=Result Details",
495 "BlackboardArtifactNode.createSheet.artifactMD5.displayName=MD5 Hash",
496 "BlackboardArtifactNode.createSheet.artifactMD5.name=MD5 Hash",
497 "BlackboardArtifactNode.createSheet.fileSize.name=Size",
498 "BlackboardArtifactNode.createSheet.fileSize.displayName=Size",
499 "BlackboardArtifactNode.createSheet.path.displayName=Path",
500 "BlackboardArtifactNode.createSheet.path.name=Path"
507 Sheet sheet = super.createSheet();
508 Sheet.Set sheetSet = sheet.get(Sheet.PROPERTIES);
509 if (sheetSet == null) {
510 sheetSet = Sheet.createPropertiesSet();
521 Bundle.BlackboardArtifactNode_createSheet_srcFile_name(),
522 Bundle.BlackboardArtifactNode_createSheet_srcFile_displayName(),
533 Bundle.BlackboardArtifactNode_createSheet_srcFile_origName(),
534 Bundle.BlackboardArtifactNode_createSheet_srcFile_origDisplayName(),
536 translatedSourceName != null ? srcContent.getName() :
""));
537 if (translatedSourceName == null) {
554 Bundle.BlackboardArtifactNode_createSheet_score_name(),
555 Bundle.BlackboardArtifactNode_createSheet_score_displayName(),
559 Bundle.BlackboardArtifactNode_createSheet_comment_name(),
560 Bundle.BlackboardArtifactNode_createSheet_comment_displayName(),
565 Bundle.BlackboardArtifactNode_createSheet_count_name(),
566 Bundle.BlackboardArtifactNode_createSheet_count_displayName(),
570 backgroundTasksPool.submit(
new GetSCOTask(
new WeakReference<>(
this), weakListener));
578 if (artifact.getArtifactTypeID() == ARTIFACT_TYPE.TSK_INTERESTING_ARTIFACT_HIT.getTypeID()) {
580 BlackboardAttribute attribute = artifact.getAttribute(
new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_ASSOCIATED_ARTIFACT));
581 if (attribute != null) {
584 NbBundle.getMessage(
BlackboardArtifactNode.class,
"BlackboardArtifactNode.createSheet.artifactType.name"),
585 NbBundle.getMessage(
BlackboardArtifactNode.class,
"BlackboardArtifactNode.createSheet.artifactType.displayName"),
587 associatedArtifact.getDisplayName()));
589 NbBundle.getMessage(
BlackboardArtifactNode.class,
"BlackboardArtifactNode.createSheet.artifactDetails.name"),
590 NbBundle.getMessage(
BlackboardArtifactNode.class,
"BlackboardArtifactNode.createSheet.artifactDetails.displayName"),
592 associatedArtifact.getShortDescription()));
595 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting associated artifact of TSK_INTERESTING_ARTIFACT_HIT artifact (objID={0}))", artifact.getId()), ex);
603 Map<String, Object> map =
new LinkedHashMap<>();
605 for (Map.Entry<String, Object> entry : map.entrySet()) {
615 if (customProperties != null) {
626 final int artifactTypeId = artifact.getArtifactTypeID();
627 if (artifactTypeId == BlackboardArtifact.ARTIFACT_TYPE.TSK_EXT_MISMATCH_DETECTED.getTypeID()) {
629 String actualMimeType =
"";
630 if (srcContent instanceof AbstractFile) {
631 AbstractFile file = (AbstractFile) srcContent;
632 ext = file.getNameExtension();
633 actualMimeType = file.getMIMEType();
634 if (actualMimeType == null) {
646 NbBundle.getMessage(
BlackboardArtifactNode.class,
"BlackboardArtifactNode.createSheet.mimeType.displayName"),
655 if (Arrays.asList(SHOW_UNIQUE_PATH).contains(artifactTypeId)) {
656 String sourcePath =
"";
658 sourcePath = srcContent.getUniquePath();
659 }
catch (TskCoreException ex) {
660 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting unique path of source content (artifact objID={0})", artifact.getId()), ex);
664 if (sourcePath.isEmpty() ==
false) {
667 NbBundle.getMessage(
BlackboardArtifactNode.class,
"BlackboardArtifactNode.createSheet.filePath.displayName"),
677 if (Arrays.asList(SHOW_FILE_METADATA).contains(artifactTypeId)) {
678 AbstractFile file = srcContent instanceof AbstractFile ? (AbstractFile) srcContent : null;
681 NbBundle.getMessage(
BlackboardArtifactNode.class,
"ContentTagNode.createSheet.fileModifiedTime.displayName"),
686 NbBundle.getMessage(
BlackboardArtifactNode.class,
"ContentTagNode.createSheet.fileChangedTime.displayName"),
691 NbBundle.getMessage(
BlackboardArtifactNode.class,
"ContentTagNode.createSheet.fileAccessedTime.displayName"),
696 NbBundle.getMessage(
BlackboardArtifactNode.class,
"ContentTagNode.createSheet.fileCreatedTime.displayName"),
703 file == null ?
"" : file.getSize()));
705 Bundle.BlackboardArtifactNode_createSheet_artifactMD5_name(),
706 Bundle.BlackboardArtifactNode_createSheet_artifactMD5_displayName(),
708 file == null ?
"" : StringUtils.defaultString(file.getMd5Hash())));
711 String dataSourceStr =
"";
713 Content dataSource = srcContent.getDataSource();
714 if (dataSource != null) {
715 dataSourceStr = dataSource.getName();
719 }
catch (TskCoreException ex) {
720 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting source data source name (artifact objID={0})", artifact.getId()), ex);
724 if (dataSourceStr.isEmpty() ==
false) {
727 NbBundle.getMessage(
BlackboardArtifactNode.class,
"BlackboardArtifactNode.createSheet.dataSrc.displayName"),
737 if (artifactTypeId == BlackboardArtifact.ARTIFACT_TYPE.TSK_METADATA_EXIF.getTypeID()) {
740 if (srcContent instanceof AbstractFile) {
741 AbstractFile af = (AbstractFile) srcContent;
744 path = af.getUniquePath();
745 }
catch (TskCoreException ex) {
746 path = af.getParentPath();
752 NbBundle.getMessage(
BlackboardArtifactNode.class,
"BlackboardArtifactNode.createSheet.fileSize.displayName"),
774 List<Tag> tags =
new ArrayList<>();
779 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting tags for artifact and its source content (artifact objID={0})", artifact.getId()), ex);
798 return correlationAttribute;
824 for (Tag tag : tags) {
825 if (!StringUtils.isBlank(tag.getComment())) {
835 if (attribute != null && !StringUtils.isBlank(attribute.
getComment())) {
872 String description = Bundle.BlackboardArtifactNode_createSheet_noScore_description();
873 if (srcContent instanceof AbstractFile) {
874 if (((AbstractFile) srcContent).getKnown() == TskData.FileKnown.BAD) {
876 description = Bundle.BlackboardArtifactNode_createSheet_notableFile_description();
884 if (score ==
Score.
NO_SCORE && artifact.getArtifactTypeID() == ARTIFACT_TYPE.TSK_HASHSET_HIT.getTypeID()) {
886 BlackboardAttribute attr = artifact.getAttribute(
new BlackboardAttribute.Type(ATTRIBUTE_TYPE.TSK_SET_NAME));
889 if (hashDb.getHashSetName().equals(attr.getValueString())) {
891 description = Bundle.BlackboardArtifactNode_createSheet_notableFile_description();
895 }
catch (TskCoreException ex) {
896 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting TSK_SET_NAME attribute for TSK_HASHSET_HIT artifact (artifact objID={0})", artifact.getId()), ex);
905 if (!srcContent.getArtifacts(BlackboardArtifact.ARTIFACT_TYPE.TSK_INTERESTING_ARTIFACT_HIT).isEmpty()) {
907 description = Bundle.BlackboardArtifactNode_createSheet_interestingResult_description();
909 }
catch (TskCoreException ex) {
910 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting TSK_INTERESTING_ARTIFACT_HIT artifacts for source content (artifact objID={0})", artifact.getId()), ex);
921 description = Bundle.BlackboardArtifactNode_createSheet_taggedItem_description();
922 for (Tag tag : tags) {
923 if (tag.getName().getKnownStatus() == TskData.FileKnown.BAD) {
925 description = Bundle.BlackboardArtifactNode_createSheet_notableTaggedItem_description();
931 return Pair.of(score, description);
955 String description = defaultDescription;
957 if (corrAttrType != null && StringUtils.isNotBlank(attributeValue)) {
959 description = Bundle.BlackboardArtifactNode_createSheet_count_description(count, corrAttrType.
getDisplayName());
960 }
else if (corrAttrType != null) {
961 description = Bundle.BlackboardArtifactNode_createSheet_count_noCorrelationValues_description();
964 logger.log(Level.SEVERE, MessageFormat.format(
"Error querying central repository for other occurences count (artifact objID={0}, corrAttrType={1}, corrAttrValue={2})", artifact.getId(), corrAttrType, attributeValue), ex);
966 logger.log(Level.SEVERE, MessageFormat.format(
"Error normalizing correlation attribute for central repository query (artifact objID={0}, corrAttrType={2}, corrAttrValue={3})", artifact.getId(), corrAttrType, attributeValue), ex);
968 return Pair.of(count, description);
985 String parentName = srcContent.getName();
988 while ((parent = parent.getParent()) != null) {
989 parentName = parent.getName();
991 }
catch (TskCoreException ex) {
992 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting root ancestor name for source content (artifact objID={0})", artifact.getId()), ex);
1005 if (customProperties == null) {
1006 customProperties =
new ArrayList<>();
1008 customProperties.add(property);
1019 @SuppressWarnings(
"deprecation")
1022 for (BlackboardAttribute attribute : artifact.getAttributes()) {
1023 final int attributeTypeID = attribute.getAttributeType().getTypeID();
1024 if (attributeTypeID == ATTRIBUTE_TYPE.TSK_PATH_ID.getTypeID()
1025 || attributeTypeID == ATTRIBUTE_TYPE.TSK_TAGGED_ARTIFACT.getTypeID()
1026 || attributeTypeID == ATTRIBUTE_TYPE.TSK_ASSOCIATED_ARTIFACT.getTypeID()
1027 || attributeTypeID == ATTRIBUTE_TYPE.TSK_SET_NAME.getTypeID()
1028 || attributeTypeID == ATTRIBUTE_TYPE.TSK_KEYWORD_SEARCH_TYPE.getTypeID()
1029 || attribute.getValueType() == BlackboardAttribute.TSK_BLACKBOARD_ATTRIBUTE_VALUE_TYPE.JSON) {
1033 }
else if (artifact.getArtifactTypeID() == BlackboardArtifact.ARTIFACT_TYPE.TSK_EMAIL_MSG.getTypeID()) {
1035 }
else if (attribute.getAttributeType().getValueType() == BlackboardAttribute.TSK_BLACKBOARD_ATTRIBUTE_VALUE_TYPE.DATETIME) {
1037 }
else if (artifact.getArtifactTypeID() == ARTIFACT_TYPE.TSK_TOOL_OUTPUT.getTypeID()
1038 && attributeTypeID == ATTRIBUTE_TYPE.TSK_TEXT.getTypeID()) {
1047 String value = attribute.getDisplayString();
1048 if (value.length() > 512) {
1049 value = value.substring(0, 512);
1051 map.put(attribute.getAttributeType().getDisplayName(), value);
1053 switch (attribute.getAttributeType().getValueType()) {
1055 map.put(attribute.getAttributeType().getDisplayName(), attribute.getValueInt());
1058 map.put(attribute.getAttributeType().getDisplayName(), attribute.getValueDouble());
1061 map.put(attribute.getAttributeType().getDisplayName(), attribute.getValueLong());
1064 map.put(attribute.getAttributeType().getDisplayName(), attribute.getDisplayString());
1070 }
catch (TskCoreException ex) {
1071 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting artifact attributes (artifact objID={0})", artifact.getId()), ex);
1085 final int attributeTypeID = attribute.getAttributeType().getTypeID();
1086 if (attributeTypeID == ATTRIBUTE_TYPE.TSK_DATETIME_SENT.getTypeID()
1087 || attributeTypeID == ATTRIBUTE_TYPE.TSK_EMAIL_CONTENT_HTML.getTypeID()
1088 || attributeTypeID == ATTRIBUTE_TYPE.TSK_EMAIL_CONTENT_RTF.getTypeID()
1089 || attributeTypeID == ATTRIBUTE_TYPE.TSK_EMAIL_BCC.getTypeID()
1090 || attributeTypeID == ATTRIBUTE_TYPE.TSK_EMAIL_CC.getTypeID()
1091 || attributeTypeID == ATTRIBUTE_TYPE.TSK_HEADERS.getTypeID()) {
1095 }
else if (attributeTypeID == ATTRIBUTE_TYPE.TSK_EMAIL_CONTENT_PLAIN.getTypeID()) {
1096 String value = attribute.getDisplayString();
1097 if (value.length() > 160) {
1098 value = value.substring(0, 160) +
"...";
1100 map.put(attribute.getAttributeType().getDisplayName(), value);
1101 }
else if (attribute.getAttributeType().getValueType() == BlackboardAttribute.TSK_BLACKBOARD_ATTRIBUTE_VALUE_TYPE.DATETIME) {
1104 map.put(attribute.getAttributeType().getDisplayName(), attribute.getDisplayString());
1110 return visitor.
visit(
this);
1120 return getClass().getName();
1124 public <T> T accept(ContentNodeVisitor<T> visitor) {
1125 return visitor.visit(
this);
1140 @NbBundle.Messages({
"BlackboardArtifactNode.createSheet.score.name=S",
1141 "BlackboardArtifactNode.createSheet.score.displayName=S",
1142 "BlackboardArtifactNode.createSheet.notableFile.description=Associated file recognized as notable.",
1143 "BlackboardArtifactNode.createSheet.interestingResult.description=Result has an interesting result associated with it.",
1144 "BlackboardArtifactNode.createSheet.taggedItem.description=Result or associated file has been tagged.",
1145 "BlackboardArtifactNode.createSheet.notableTaggedItem.description=Result or associated file tagged with notable tag.",
1146 "BlackboardArtifactNode.createSheet.noScore.description=No score"})
1150 sheetSet.put(
new NodeProperty<>(Bundle.BlackboardArtifactNode_createSheet_score_name(), Bundle.BlackboardArtifactNode_createSheet_score_displayName(), scoreAndDescription.getRight(), scoreAndDescription.getLeft()));
1162 @NbBundle.Messages({
1163 "BlackboardArtifactNode.createSheet.tags.displayName=Tags"}
1167 List<Tag> tags =
new ArrayList<>();
1172 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting tags for artifact and source content (artifact objID={0})", artifact.getId()), ex);
1174 sheetSet.put(
new NodeProperty<>(
"Tags", Bundle.BlackboardArtifactNode_createSheet_tags_displayName(),
NO_DESCR, tags.stream().map(t -> t.getName().getDisplayName()).collect(Collectors.joining(
", "))));
1190 sheetSet.put(
new NodeProperty<>(
"Tags", Bundle.BlackboardArtifactNode_createSheet_tags_displayName(),
NO_DESCR, tags.stream().map(t -> t.getName().getDisplayName()).collect(Collectors.joining(
", "))));
1205 @NbBundle.Messages({
"BlackboardArtifactNode.createSheet.count.name=O",
1206 "BlackboardArtifactNode.createSheet.count.displayName=O",
1207 "BlackboardArtifactNode.createSheet.count.noCorrelationAttributes.description=No correlation properties found",
1208 "BlackboardArtifactNode.createSheet.count.noCorrelationValues.description=Unable to find other occurrences because no value exists for the available correlation property",
1209 "# {0} - occurrenceCount",
1210 "# {1} - attributeType",
1211 "BlackboardArtifactNode.createSheet.count.description=There were {0} datasource(s) found with occurrences of the correlation value of type {1}"})
1215 sheetSet.put(
new NodeProperty<>(Bundle.BlackboardArtifactNode_createSheet_count_name(), Bundle.BlackboardArtifactNode_createSheet_count_displayName(), countAndDescription.getRight(), countAndDescription.getLeft()));
1232 @NbBundle.Messages({
"BlackboardArtifactNode.createSheet.comment.name=C",
1233 "BlackboardArtifactNode.createSheet.comment.displayName=C"})
1237 sheetSet.put(
new NodeProperty<>(Bundle.BlackboardArtifactNode_createSheet_comment_name(), Bundle.BlackboardArtifactNode_createSheet_comment_displayName(),
NO_DESCR, status));
Pair< DataResultViewerTable.Score, String > getScorePropertyAndDescription(List< Tag > tags)
static final String VALUE_LOADING
final void addTagProperty(Sheet.Set sheetSet, List< Tag > tags)
void addTagProperty(Sheet.Set sheetSet)
void fillPropertyMap(Map< String, Object > map, BlackboardArtifact artifact)
static String getStringTime(long epochSeconds, TimeZone tzone)
static Lookup createLookup(BlackboardArtifact artifact, boolean lookupIsAssociatedFile)
static boolean hasSupportedTimeStamp(BlackboardArtifact artifact)
void setName(String name)
static String getPropertyName()
BlackboardArtifactNode(BlackboardArtifact artifact, String iconPath)
final PropertyChangeListener weakListener
static Lookup createLookup(BlackboardArtifact artifact)
static final Integer[] SHOW_FILE_METADATA
static final Cache< Long, Content > contentCache
volatile String translatedSourceName
String getCorrelationValue()
T visit(DataSourcesNode in)
Action[] getActions(boolean context)
Type getCorrelationType()
void addNodeProperty(NodeProperty<?> property)
Pair< Long, String > getCountPropertyAndDescription(Type corrAttrType, String attributeValue, String defaultDescription)
static ViewFileInTimelineAction createViewSourceFileAction(AbstractFile file)
static final Set< Case.Events > CASE_EVENTS_OF_INTEREST
final void addScorePropertyAndDescription(Sheet.Set sheetSet, List< Tag > tags)
TagsManager getTagsManager()
synchronized List< HashDb > getKnownBadFileHashSets()
static TextTranslationService getInstance()
static boolean displayTranslatedFileNames()
static Content getPathIdFile(BlackboardArtifact artifact)
List< NodeProperty<?extends Object > > customProperties
static synchronized HashDbManager getInstance()
final List< Tag > getAllTagsFromDatabase()
final BlackboardArtifact artifact
static CorrelationAttributeInstance getCorrAttrForFile(AbstractFile file)
void addEmailMsgProperty(Map< String, Object > map, BlackboardAttribute attribute)
static String getIconFilePath(int typeID)
static boolean getHideSCOColumns()
final void addCommentProperty(Sheet.Set sheetSet, List< Tag > tags, CorrelationAttributeInstance attribute)
final CorrelationAttributeInstance getCorrelationAttributeInstance()
SleuthkitCase getSleuthkitCase()
synchronized boolean hasProvider()
DataResultViewerTable.HasCommentStatus getCommentProperty(List< Tag > tags, CorrelationAttributeInstance attribute)
final void addCountProperty(Sheet.Set sheetSet, CorrelationAttributeInstance attribute)
BLACKBOARD_ARTIFACT_TAG_ADDED
static final Logger logger
BlackboardArtifact getArtifact()
synchronized static Logger getLogger(String name)
String getRootAncestorName()
static Case getCurrentCaseThrows()
static void addEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
BlackboardArtifactNode(BlackboardArtifact artifact, boolean lookupIsAssociatedFile)
final PropertyChangeListener listener
static void removeEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
static CentralRepository getInstance()
Long getCountUniqueCaseDataSourceTuplesHavingTypeValue(CorrelationAttributeInstance.Type aType, String value)
BlackboardArtifactNode(BlackboardArtifact artifact)
static final Integer[] SHOW_UNIQUE_PATH
static ViewFileInTimelineAction createViewFileAction(AbstractFile file)
BLACKBOARD_ARTIFACT_TAG_DELETED
void unregisterListener()
static boolean isEnabled()
static final String NO_DESCR