19 package org.sleuthkit.autopsy.datamodel;
23 import com.google.common.annotations.Beta;
24 import com.google.common.cache.Cache;
25 import com.google.common.cache.CacheBuilder;
26 import java.beans.PropertyChangeEvent;
27 import java.beans.PropertyChangeListener;
28 import java.lang.ref.WeakReference;
29 import java.text.MessageFormat;
30 import java.util.ArrayList;
31 import java.util.Arrays;
32 import java.util.Collections;
33 import java.util.EnumSet;
34 import java.util.LinkedHashMap;
35 import java.util.List;
37 import java.util.MissingResourceException;
39 import java.util.concurrent.ExecutionException;
40 import java.util.concurrent.TimeUnit;
41 import java.util.logging.Level;
42 import java.util.stream.Collectors;
43 import java.util.stream.Stream;
44 import javax.swing.Action;
45 import javax.swing.SwingUtilities;
46 import org.apache.commons.lang3.StringUtils;
47 import org.apache.commons.lang3.tuple.Pair;
48 import org.openide.nodes.Node;
49 import org.openide.nodes.Sheet;
50 import org.openide.util.Lookup;
51 import org.openide.util.NbBundle;
52 import org.openide.util.NbBundle.Messages;
53 import org.openide.util.Utilities;
54 import org.openide.util.WeakListeners;
55 import org.openide.util.lookup.Lookups;
135 private static final Cache<Long, Content>
contentCache = CacheBuilder.newBuilder().expireAfterWrite(1, TimeUnit.MINUTES).build();
156 @SuppressWarnings(
"deprecation")
175 private final PropertyChangeListener
listener =
new PropertyChangeListener() {
177 public void propertyChange(PropertyChangeEvent evt) {
178 String eventType = evt.getPropertyName();
181 if (event.getAddedTag().getArtifact().equals(artifact)) {
186 if (event.getDeletedTagInfo().getArtifactID() == artifact.
getArtifactID()) {
191 if (event.getAddedTag().getContent().equals(srcContent)) {
196 if (event.getDeletedTagInfo().getContentID() == srcContent.
getId()) {
201 if (event.getContentID() == srcContent.
getId()) {
205 if (evt.getNewValue() == null) {
210 contentCache.invalidateAll();
221 String originalName = evt.getOldValue().toString();
222 translatedSourceName = evt.getNewValue().toString();
223 setDisplayName(translatedSourceName);
224 setShortDescription(originalName);
226 Bundle.BlackboardArtifactNode_createSheet_srcFile_origName(),
227 Bundle.BlackboardArtifactNode_createSheet_srcFile_origDisplayName(),
241 private final PropertyChangeListener
weakListener = WeakListeners.propertyChange(listener, null);
260 if (srcContent == null) {
261 throw new IllegalArgumentException(MessageFormat.format(
"Artifact missing source content (artifact objID={0})", artifact));
273 logger.log(Level.WARNING, MessageFormat.format(
"Error getting the unique path of the source content (artifact objID={0})", artifact.
getId()), ex);
278 setIconBaseWithExtension(iconPath != null && iconPath.charAt(0) ==
'/' ? iconPath.substring(1) : iconPath);
295 super(artifact,
createLookup(artifact, useAssociatedFileInLookup));
302 logger.log(Level.WARNING, MessageFormat.format(
"Error getting the parent of the artifact for (artifact objID={0})", artifact.
getId()), ex);
305 if (srcContent != null) {
315 logger.log(Level.WARNING, MessageFormat.format(
"Error getting the unique path of the source content (artifact objID={0})", artifact.
getId()), ex);
318 throw new IllegalArgumentException(MessageFormat.format(
"Artifact missing source content (artifact objID={0})", artifact));
324 setIconBaseWithExtension(iconPath != null && iconPath.charAt(0) ==
'/' ? iconPath.substring(1) : iconPath);
351 logger.log(Level.WARNING, MessageFormat.format(
"Error getting the artifact type for artifact (artifact objID={0})", artifact.
getId()), ex);
373 if (useAssociatedFile) {
379 }
catch (ExecutionException ex) {
380 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting source/associated content (artifact object ID={0})", artifact.
getId()), ex);
405 if (content == null) {
406 return Lookups.fixed(artifact, artifactItem);
408 return Lookups.fixed(artifact, artifactItem, content);
421 for (
Content lookupContent : this.getLookup().lookupAll(
Content.class)) {
431 if ((lookupContent != null) && (lookupContent.getId() != artifact.
getId())) {
432 return lookupContent;
454 if (attribute != null) {
458 logger.log(Level.WARNING, MessageFormat.format(
"Error getting content for path id attrbiute for artifact: ", artifact.
getId()), ex);
502 return Stream.of(items)
503 .filter(i -> i != null)
504 .collect(Collectors.toList());
510 List<List<Action>> actionsLists =
new ArrayList<>();
532 if (this.srcContent instanceof
Report) {
537 int selectedFileCount = Utilities.actionsGlobalContext().lookupAll(
AbstractFile.class).size();
538 int selectedArtifactCount = Utilities.actionsGlobalContext().lookupAll(
BlackboardArtifactItem.class).size();
544 if (parentFileNode != null) {
549 actionsLists.add(
getTagActions(parentFileNode != null, this.artifact, selectedFileCount, selectedArtifactCount));
555 actionsLists.add(Arrays.asList(super.getActions(context)));
557 return actionsLists.stream()
559 .filter((lst) -> lst != null && !lst.isEmpty())
561 .flatMap(lst -> Stream.concat(Stream.of((Action) null), lst.stream()))
564 .toArray(sz ->
new Action[sz]);
576 "BlackboardArtifactNode_getAssociatedTypeStr_webCache=Cached File",
577 "BlackboardArtifactNode_getAssociatedTypeStr_webDownload=Downloaded File",
578 "BlackboardArtifactNode_getAssociatedTypeStr_associated=Associated File",})
581 return Bundle.BlackboardArtifactNode_getAssociatedTypeStr_webCache();
583 return Bundle.BlackboardArtifactNode_getAssociatedTypeStr_webDownload();
585 return Bundle.BlackboardArtifactNode_getAssociatedTypeStr_associated();
598 "BlackboardArtifactNode_getViewSrcContentAction_type_File=File",
599 "BlackboardArtifactNode_getViewSrcContentAction_type_DataArtifact=Data Artifact",
600 "BlackboardArtifactNode_getViewSrcContentAction_type_OSAccount=OS Account",
601 "BlackboardArtifactNode_getViewSrcContentAction_type_unknown=Item"
605 return Bundle.BlackboardArtifactNode_getViewSrcContentAction_type_File();
607 return Bundle.BlackboardArtifactNode_getViewSrcContentAction_type_DataArtifact();
608 }
else if (content instanceof
OsAccount) {
609 return Bundle.BlackboardArtifactNode_getViewSrcContentAction_type_OSAccount();
611 return Bundle.BlackboardArtifactNode_getViewSrcContentAction_type_unknown();
627 "BlackboardArtifactNode_getAssociatedFileActions_viewAssociatedFileAction=View {0} in Directory",
629 "BlackboardArtifactNode_getAssociatedFileActions_viewAssociatedFileInTimelineAction=View {0} in Timeline..."
634 if (associatedFile != null) {
635 return Arrays.asList(
637 Bundle.BlackboardArtifactNode_getAssociatedFileActions_viewAssociatedFileAction(
641 Bundle.BlackboardArtifactNode_getAssociatedFileActions_viewAssociatedFileInTimelineAction(
647 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting linked file of artifact (artifact objID={0})", artifact.
getId()), ex);
649 return Collections.emptyList();
661 "# {0} - contentType",
662 "BlackboardArtifactNode_getSrcContentAction_actionDisplayName=View Source {0} in Directory"
668 Bundle.BlackboardArtifactNode_getSrcContentAction_actionDisplayName(
670 }
else if (content instanceof
OsAccount) {
673 Bundle.BlackboardArtifactNode_getSrcContentAction_actionDisplayName(
675 }
else if (content instanceof
AbstractFile || artifact instanceof DataArtifact) {
677 Bundle.BlackboardArtifactNode_getSrcContentAction_actionDisplayName(
694 if (content instanceof
File) {
696 }
else if (content instanceof
Directory) {
706 }
else if (content instanceof
SlackFile) {
723 .contains(
"." + ((AbstractFile) srcContent).getNameExtension().toLowerCase())) {
729 logger.log(Level.WARNING,
"Unable to add unzip with password action to context menus", ex);
748 List<Action> actionsList =
new ArrayList<>();
751 if (hasSrcFile && !(artifact instanceof
DataArtifact)) {
758 if (hasSrcFile && (!(artifact instanceof DataArtifact)) && (selectedFileCount == 1)) {
762 if (selectedArtifactCount == 1) {
778 "BlackboardArtifactNode_getSrcContentViewerActions_viewInNewWin=View Item in New Window",
779 "BlackboardArtifactNode_getSrcContentViewerActions_openInExtViewer=Open in External Viewer Ctrl+E"
782 List<Action> actionsList =
new ArrayList<>();
783 if (srcFileNode != null) {
784 actionsList.add(
new NewWindowViewAction(Bundle.BlackboardArtifactNode_getSrcContentViewerActions_viewInNewWin(), srcFileNode));
785 if (selectedFileCount == 1) {
786 actionsList.add(
new ExternalViewerAction(Bundle.BlackboardArtifactNode_getSrcContentViewerActions_openInExtViewer(), srcFileNode));
803 "# {0} - contentType",
804 "BlackboardArtifactNode_getTimelineSrcContentAction_actionDisplayName=View Source {0} in Timeline... "
809 Bundle.BlackboardArtifactNode_getTimelineSrcContentAction_actionDisplayName(
815 Bundle.BlackboardArtifactNode_getTimelineSrcContentAction_actionDisplayName(
819 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting source data artifact timestamp (artifact objID={0})", srcContent.
getId()), ex);
835 "BlackboardArtifactNode_getTimelineArtifactAction_displayName=View Selected Item in Timeline... "
844 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting artifact timestamp (artifact objID={0})", art.
getId()), ex);
861 "BlackboardArtifactNode.createSheet.srcFile.name=Source Name",
862 "BlackboardArtifactNode.createSheet.srcFile.displayName=Source Name",
863 "BlackboardArtifactNode.createSheet.srcFile.origName=Original Name",
864 "BlackboardArtifactNode.createSheet.srcFile.origDisplayName=Original Name",
865 "BlackboardArtifactNode.createSheet.artifactType.displayName=Result Type",
866 "BlackboardArtifactNode.createSheet.artifactType.name=Result Type",
867 "BlackboardArtifactNode.createSheet.artifactDetails.displayName=Result Details",
868 "BlackboardArtifactNode.createSheet.artifactDetails.name=Result Details",
869 "BlackboardArtifactNode.createSheet.artifactMD5.displayName=MD5 Hash",
870 "BlackboardArtifactNode.createSheet.artifactMD5.name=MD5 Hash",
871 "BlackboardArtifactNode.createSheet.fileSize.name=Size",
872 "BlackboardArtifactNode.createSheet.fileSize.displayName=Size",
873 "BlackboardArtifactNode.createSheet.path.displayName=Path",
874 "BlackboardArtifactNode.createSheet.path.name=Path"
880 @SuppressWarnings(
"deprecation")
886 Sheet sheet = super.createSheet();
887 Sheet.Set sheetSet = sheet.get(Sheet.PROPERTIES);
888 if (sheetSet == null) {
889 sheetSet = Sheet.createPropertiesSet();
900 Bundle.BlackboardArtifactNode_createSheet_srcFile_name(),
901 Bundle.BlackboardArtifactNode_createSheet_srcFile_displayName(),
921 Bundle.BlackboardArtifactNode_createSheet_srcFile_origName(),
922 Bundle.BlackboardArtifactNode_createSheet_srcFile_origDisplayName(),
924 translatedSourceName != null ? srcContent.
getName() :
""));
925 if (translatedSourceName == null) {
941 if (attribute != null) {
945 "BlackboardArtifactNode.createSheet.artifactType.name"),
947 "BlackboardArtifactNode.createSheet.artifactType.displayName"),
952 "BlackboardArtifactNode.createSheet.artifactDetails.name"),
954 "BlackboardArtifactNode.createSheet.artifactDetails.displayName"),
959 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting associated artifact with type " + artifact.
getArtifactTypeName() +
" artifact (objID={0}))", artifact.
getId()), ex);
967 Map<String, Object> map =
new LinkedHashMap<>();
969 for (Map.Entry<String, Object> entry : map.entrySet()) {
979 if (customProperties != null) {
993 String actualMimeType =
"";
995 AbstractFile file = (AbstractFile) srcContent;
998 if (actualMimeType == null) {
1005 "BlackboardArtifactNode.createSheet.ext.name"),
1007 "BlackboardArtifactNode.createSheet.ext.displayName"),
1012 "BlackboardArtifactNode.createSheet.mimeType.name"),
1014 "BlackboardArtifactNode.createSheet.mimeType.displayName"),
1024 String sourcePath =
"";
1028 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting unique path of source content (artifact objID={0})", artifact.
getId()), ex);
1032 if (sourcePath.isEmpty() ==
false) {
1035 "BlackboardArtifactNode.createSheet.filePath.name"),
1037 "BlackboardArtifactNode.createSheet.filePath.displayName"),
1051 "ContentTagNode.createSheet.fileModifiedTime.name"),
1053 "ContentTagNode.createSheet.fileModifiedTime.displayName"),
1058 "ContentTagNode.createSheet.fileChangedTime.name"),
1060 "ContentTagNode.createSheet.fileChangedTime.displayName"),
1065 "ContentTagNode.createSheet.fileAccessedTime.name"),
1067 "ContentTagNode.createSheet.fileAccessedTime.displayName"),
1072 "ContentTagNode.createSheet.fileCreatedTime.name"),
1074 "ContentTagNode.createSheet.fileCreatedTime.displayName"),
1079 "ContentTagNode.createSheet.fileSize.name"),
1081 "ContentTagNode.createSheet.fileSize.displayName"),
1083 file == null ?
"" : file.
getSize()));
1085 Bundle.BlackboardArtifactNode_createSheet_artifactMD5_name(),
1086 Bundle.BlackboardArtifactNode_createSheet_artifactMD5_displayName(),
1088 file == null ?
"" : StringUtils.defaultString(file.
getMd5Hash())));
1091 String dataSourceStr =
"";
1094 if (dataSource != null) {
1095 dataSourceStr = dataSource.
getName();
1100 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting source data source name (artifact objID={0})", artifact.
getId()), ex);
1104 if (dataSourceStr.isEmpty() ==
false) {
1107 "BlackboardArtifactNode.createSheet.dataSrc.name"),
1109 "BlackboardArtifactNode.createSheet.dataSrc.displayName"),
1123 AbstractFile af = (AbstractFile) srcContent;
1134 "BlackboardArtifactNode.createSheet.fileSize.name"),
1136 "BlackboardArtifactNode.createSheet.fileSize.displayName"),
1142 "BlackboardArtifactNode.createSheet.path.name"),
1144 "BlackboardArtifactNode.createSheet.path.displayName"),
1149 if (scoTask != null) {
1150 backgroundTasksPool.submit(scoTask);
1164 List<Tag> tags =
new ArrayList<>();
1169 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting tags for artifact and its source content (artifact objID={0})", artifact.
getId()), ex);
1197 for (
Tag tag : tags) {
1198 if (!StringUtils.isBlank(tag.getComment())) {
1216 logger.log(Level.SEVERE,
"Attempted to Query CR for presence of comments in a Blackboard Artifact node and was unable to perform query, comment column will only reflect caseDB", ex);
1224 String description = defaultDescription;
1229 }
else if (attribute != null) {
1230 description = Bundle.BlackboardArtifactNode_createSheet_count_noCorrelationValues_description();
1233 logger.log(Level.SEVERE, MessageFormat.format(
"Error querying central repository for other occurences count (artifact objID={0}, corrAttrType={1}, corrAttrValue={2})", artifact.
getId(), attribute.
getCorrelationType(), attribute.
getCorrelationValue()), ex);
1235 logger.log(Level.WARNING, MessageFormat.format(
"Error normalizing correlation attribute for central repository query (artifact objID={0}, corrAttrType={2}, corrAttrValue={3})", artifact.
getId(), attribute.
getCorrelationType(), attribute.
getCorrelationValue()), ex);
1237 return Pair.of(count, description);
1244 SwingUtilities.invokeLater(() -> {
1256 String parentName = srcContent.
getName();
1259 while ((parent = parent.
getParent()) != null) {
1260 parentName = parent.
getName();
1263 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting root ancestor name for source content (artifact objID={0})", artifact.
getId()), ex);
1276 if (customProperties == null) {
1277 customProperties =
new ArrayList<>();
1279 customProperties.add(property);
1290 @SuppressWarnings(
"deprecation")
1294 final int attributeTypeID = attribute.getAttributeType().getTypeID();
1318 String value = attribute.getDisplayString();
1319 if (value.length() > 512) {
1320 value = value.substring(0, 512);
1322 map.put(attribute.getAttributeType().getDisplayName(), value);
1324 switch (attribute.getAttributeType().getValueType()) {
1326 map.put(attribute.getAttributeType().getDisplayName(), attribute.getValueInt());
1329 map.put(attribute.getAttributeType().getDisplayName(), attribute.getValueDouble());
1332 map.put(attribute.getAttributeType().getDisplayName(), attribute.getValueLong());
1335 map.put(attribute.getAttributeType().getDisplayName(), attribute.getDisplayString());
1342 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting artifact attributes (artifact objID={0})", artifact.getId()), ex);
1368 if (value.length() > 160) {
1369 value = value.substring(0, 160) +
"...";
1381 return visitor.
visit(
this);
1391 return getClass().getName();
1395 public <T> T accept(ContentNodeVisitor<T> visitor) {
1396 return visitor.visit(
this);
1400 "BlackboardArtifactNode_analysisSheet_sourceType_name=Source Type",
1401 "BlackboardArtifactNode_analysisSheet_soureName_name=Source Name",
1402 "BlackboardArtifactNode_analysisSheet_score_name=Score",
1403 "BlackboardArtifactNode_analysisSheet_conclusion_name=Conclusion",
1404 "BlackboardArtifactNode_analysisSheet_configuration_name=Configuration",
1405 "BlackboardArtifactNode_analysisSheet_justifaction_name=Justification"
1416 Bundle.BlackboardArtifactNode_analysisSheet_soureName_name(),
1417 Bundle.BlackboardArtifactNode_analysisSheet_soureName_name(),
1424 Bundle.BlackboardArtifactNode_analysisSheet_sourceType_name(),
1425 Bundle.BlackboardArtifactNode_analysisSheet_sourceType_name(),
1430 Bundle.BlackboardArtifactNode_analysisSheet_score_name(),
1431 Bundle.BlackboardArtifactNode_analysisSheet_score_name(),
1436 Bundle.BlackboardArtifactNode_analysisSheet_conclusion_name(),
1437 Bundle.BlackboardArtifactNode_analysisSheet_conclusion_name(),
1442 Bundle.BlackboardArtifactNode_analysisSheet_configuration_name(),
1443 Bundle.BlackboardArtifactNode_analysisSheet_configuration_name(),
1448 Bundle.BlackboardArtifactNode_analysisSheet_justifaction_name(),
1449 Bundle.BlackboardArtifactNode_analysisSheet_justifaction_name(),
1466 Bundle.BlackboardArtifactNode_createSheet_score_name(),
1467 Bundle.BlackboardArtifactNode_createSheet_score_displayName(),
1471 Bundle.BlackboardArtifactNode_createSheet_comment_name(),
1472 Bundle.BlackboardArtifactNode_createSheet_comment_displayName(),
1477 Bundle.BlackboardArtifactNode_createSheet_count_name(),
1478 Bundle.BlackboardArtifactNode_createSheet_count_displayName(),
1482 return new GetSCOTask(
new WeakReference<>(
this), weakListener);
1499 BlackboardArtifact srcArtifact = (BlackboardArtifact) source;
1503 logger.log(Level.SEVERE,
"Failed to get custom artifact type id=" + source.
getId(), ex);
1505 }
else if (srcContent instanceof
Volume) {
1509 }
else if (srcContent instanceof
Image) {
1513 }
else if (srcContent instanceof
OsAccount) {
1517 }
else if (srcContent instanceof
Pool) {
1530 SwingUtilities.invokeLater(
new Runnable() {
1533 if (scoData.getScoreAndDescription() != null) {
1535 Bundle.BlackboardArtifactNode_createSheet_score_name(),
1536 Bundle.BlackboardArtifactNode_createSheet_score_displayName(),
1537 scoData.getScoreAndDescription().getRight(),
1538 scoData.getScoreAndDescription().getLeft()));
1540 if (scoData.getComment() != null) {
1542 Bundle.BlackboardArtifactNode_createSheet_comment_name(),
1543 Bundle.BlackboardArtifactNode_createSheet_comment_displayName(),
1546 if (scoData.getCountAndDescription() != null) {
1548 Bundle.BlackboardArtifactNode_createSheet_count_name(),
1549 Bundle.BlackboardArtifactNode_createSheet_count_displayName(),
1550 scoData.getCountAndDescription().getRight(),
1551 scoData.getCountAndDescription().getLeft()));
1563 setDisplayName(((BlackboardArtifact) srcContent).getShortDescription());
1567 logger.log(Level.WARNING,
"Failed to get short description for artifact id = " + srcContent.
getId(), ex);
1568 setDisplayName(srcContent.
getName());
1570 }
else if (srcContent instanceof
OsAccount) {
1571 setDisplayName(((OsAccount) srcContent).getAddr().orElse(srcContent.
getName()));
1573 setDisplayName(srcContent.
getName());
1576 setShortDescription(getDisplayName());
1591 @NbBundle.Messages({
"BlackboardArtifactNode.createSheet.score.name=S",
1592 "BlackboardArtifactNode.createSheet.score.displayName=S",
1593 "BlackboardArtifactNode.createSheet.notableFile.description=Associated file recognized as notable.",
1594 "BlackboardArtifactNode.createSheet.interestingResult.description=Result has an interesting result associated with it.",
1595 "BlackboardArtifactNode.createSheet.taggedItem.description=Result or associated file has been tagged.",
1596 "BlackboardArtifactNode.createSheet.notableTaggedItem.description=Result or associated file tagged with notable tag.",
1597 "BlackboardArtifactNode.createSheet.noScore.description=No score"})
1601 sheetSet.put(
new NodeProperty<>(Bundle.BlackboardArtifactNode_createSheet_score_name(), Bundle.BlackboardArtifactNode_createSheet_score_displayName(), scoreAndDescription.getRight(), scoreAndDescription.getLeft()));
1613 @NbBundle.Messages({
1614 "BlackboardArtifactNode.createSheet.tags.displayName=Tags"}
1618 List<Tag> tags =
new ArrayList<>();
1623 logger.log(Level.SEVERE, MessageFormat.format(
"Error getting tags for artifact and source content (artifact objID={0})", artifact.
getId()), ex);
1625 sheetSet.put(
new NodeProperty<>(
"Tags", Bundle.BlackboardArtifactNode_createSheet_tags_displayName(),
NO_DESCR, tags.stream().map(t -> t.getName().getDisplayName()).collect(Collectors.joining(
", "))));
1641 sheetSet.put(
new NodeProperty<>(
"Tags", Bundle.BlackboardArtifactNode_createSheet_tags_displayName(),
NO_DESCR, tags.stream().map(t -> t.getName().getDisplayName()).collect(Collectors.joining(
", "))));
1656 @NbBundle.Messages({
"BlackboardArtifactNode.createSheet.count.name=O",
1657 "BlackboardArtifactNode.createSheet.count.displayName=O",
1658 "BlackboardArtifactNode.createSheet.count.noCorrelationAttributes.description=No correlation properties found",
1659 "BlackboardArtifactNode.createSheet.count.noCorrelationValues.description=Unable to find other occurrences because no value exists for the available correlation property",
1660 "# {0} - occurrenceCount",
1661 "# {1} - attributeType",
1662 "BlackboardArtifactNode.createSheet.count.description=There were {0} datasource(s) found with occurrences of the correlation value of type {1}"})
1665 Pair<Long, String> countAndDescription =
getCountPropertyAndDescription(attribute, Bundle.BlackboardArtifactNode_createSheet_count_noCorrelationAttributes_description());
1666 sheetSet.put(
new NodeProperty<>(Bundle.BlackboardArtifactNode_createSheet_count_name(), Bundle.BlackboardArtifactNode_createSheet_count_displayName(), countAndDescription.getRight(), countAndDescription.getLeft()));
1683 @NbBundle.Messages({
"BlackboardArtifactNode.createSheet.comment.name=C",
1684 "BlackboardArtifactNode.createSheet.comment.displayName=C"})
1687 List<CorrelationAttributeInstance> attributes =
new ArrayList<>();
1688 attributes.add(attribute);
1690 sheetSet.put(
new NodeProperty<>(Bundle.BlackboardArtifactNode_createSheet_comment_name(), Bundle.BlackboardArtifactNode_createSheet_comment_displayName(),
NO_DESCR, status));
TSK_INTERESTING_ARTIFACT_HIT
static final String VALUE_LOADING
static BlackboardArtifact.Type getType(BlackboardArtifact artifact)
final void addTagProperty(Sheet.Set sheetSet, List< Tag > tags)
void addTagProperty(Sheet.Set sheetSet)
Significance getSignificance()
static final Type TSK_WEB_DOWNLOAD
void fillPropertyMap(Map< String, Object > map, BlackboardArtifact artifact)
BlackboardAttribute.TSK_BLACKBOARD_ATTRIBUTE_VALUE_TYPE getValueType()
List< Action > getAssociatedFileActions(BlackboardArtifact artifact, BlackboardArtifact.Type artifactType)
static List< String > getArchiveExtensions()
List< Action > getTagActions(boolean hasSrcFile, BlackboardArtifact artifact, int selectedFileCount, int selectedArtifactCount)
static boolean hasSupportedTimeStamp(BlackboardArtifact artifact)
void setName(String name)
final String sourceObjTypeName
static List< Action > getActions(File file, boolean isArtifactSource)
Action getViewSrcContentAction(BlackboardArtifact artifact, Content content)
String getArtifactTypeName()
List< Action > getNonNull(Action...items)
static String getPropertyName()
static synchronized AddBlackboardArtifactTagAction getInstance()
static String getFormattedTime(long epochTime)
TSK_EXT_MISMATCH_DETECTED
static synchronized DeleteFileBlackboardArtifactTagAction getInstance()
void setDisplayNameBySourceContent()
Content getContentById(long id)
BlackboardArtifactNode(BlackboardArtifact artifact, String iconPath)
final PropertyChangeListener weakListener
String getNameExtension()
String getSourceObjType(Content source)
static final Integer[] SHOW_FILE_METADATA
String getShortDescription()
SleuthkitCase getSleuthkitCase()
static final Cache< Long, Content > contentCache
volatile String translatedSourceName
void updateSCOColumns(final SCOData scoData)
BlackboardArtifact.Type getType()
String getCorrelationValue()
BlackboardArtifact getBlackboardArtifact(long artifactID)
static synchronized ExportCSVAction getInstance()
static final Type TSK_ENCRYPTION_DETECTED
String getConfiguration()
Action[] getActions(boolean context)
Type getCorrelationType()
void addNodeProperty(NodeProperty<?> property)
static synchronized DeleteFileContentTagAction getInstance()
static final Set< Case.Events > CASE_EVENTS_OF_INTEREST
String getJustification()
final void addScorePropertyAndDescription(Sheet.Set sheetSet, List< Tag > tags)
String getDisplayString()
TagsManager getTagsManager()
Action getTimelineArtifactAction(BlackboardArtifact art)
static TextTranslationService getInstance()
BlackboardAttribute getAttribute(BlackboardAttribute.Type attributeType)
GetSCOTask updateSheetForAnalysisResult(AnalysisResult result, Sheet.Set sheetSet)
static boolean displayTranslatedFileNames()
BlackboardArtifactNode(BlackboardArtifact artifact, boolean useAssociatedFileInLookup)
static final Type TSK_WEB_CACHE
static Content getPathIdFile(BlackboardArtifact artifact)
List< NodeProperty<?extends Object > > customProperties
static boolean commentExistsOnAttributes(List< CorrelationAttributeInstance > attributes)
final List< Tag > getAllTagsFromDatabase()
static Lookup createLookup(BlackboardArtifact artifact, boolean useAssociatedFile)
final BlackboardArtifact artifact
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)
Pair< Score, String > getScorePropertyAndDescription()
BlackboardAttribute.Type getAttributeType()
SleuthkitCase getSleuthkitCase()
Pair< Long, String > getCountPropertyAndDescription(CorrelationAttributeInstance attribute, String defaultDescription)
T visit(DataSourceFilesNode in)
String getContentTypeStr(Content content)
DataResultViewerTable.HasCommentStatus getCommentProperty(List< Tag > tags, List< CorrelationAttributeInstance > attributes)
synchronized boolean hasProvider()
final void addCountProperty(Sheet.Set sheetSet, CorrelationAttributeInstance attribute)
Long getCountCasesWithOtherInstances(CorrelationAttributeInstance instance)
List< Action > getSrcContentViewerActions(Node srcFileNode, int selectedFileCount)
BLACKBOARD_ARTIFACT_TAG_ADDED
boolean equals(Object that)
static final Logger logger
Action getExtractWithPasswordAction(Content srcContent)
BlackboardArtifact getArtifact()
static synchronized ExternalViewerShortcutAction getInstance()
final BlackboardArtifact.Type artifactType
synchronized static Logger getLogger(String name)
GetSCOTask addSCOColumns(Sheet.Set sheetSet)
String getRootAncestorName()
static Case getCurrentCaseThrows()
Content getSourceContentFromLookup(BlackboardArtifact artifact)
Node getParentFileNode(Content content)
static void addEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
ArrayList< BlackboardArtifact > getArtifacts(String artifactTypeName)
final PropertyChangeListener listener
static void removeEventTypeSubscriber(Set< Events > eventTypes, PropertyChangeListener subscriber)
Action getTimelineSrcContentAction(Content srcContent)
static CentralRepository getInstance()
String getAssociatedTypeStr(BlackboardArtifact.Type artifactType)
BlackboardArtifactNode(BlackboardArtifact artifact)
static synchronized AddContentTagAction getInstance()
BLACKBOARD_ARTIFACT_TAG_DELETED
void unregisterListener()
static boolean isEnabled()
static final String NO_DESCR