19 package org.sleuthkit.autopsy.contentviewers.analysisresults;
 
   21 import java.util.Collection;
 
   22 import java.util.Collections;
 
   23 import java.util.List;
 
   24 import java.util.Objects;
 
   25 import java.util.Optional;
 
   26 import java.util.logging.Level;
 
   27 import java.util.logging.Logger;
 
   28 import java.util.stream.Collectors;
 
   29 import java.util.stream.Stream;
 
   30 import org.apache.commons.lang3.tuple.Pair;
 
   31 import org.openide.nodes.Node;
 
   32 import org.openide.util.NbBundle;
 
   51     static class ResultDisplayAttributes {
 
   54         private final List<Pair<String, String>> attributesToDisplay;
 
   64         ResultDisplayAttributes(
AnalysisResult analysisResult, List<Pair<String, String>> attributesToDisplay) {
 
   65             this.analysisResult = analysisResult;
 
   66             this.attributesToDisplay = attributesToDisplay;
 
   74         List<Pair<String, String>> getAttributesToDisplay() {
 
   75             return Collections.unmodifiableList(attributesToDisplay);
 
   84             return analysisResult;
 
   92     static class NodeResults {
 
   94         private final List<ResultDisplayAttributes> analysisResults;
 
   95         private final Optional<AnalysisResult> selectedResult;
 
   96         private final Optional<Score> aggregateScore;
 
   97         private final Optional<String> itemName;
 
  110         NodeResults(List<ResultDisplayAttributes> analysisResults, Optional<AnalysisResult> selectedResult,
 
  111                 Optional<Score> aggregateScore, Optional<String> itemName) {
 
  112             this.analysisResults = analysisResults;
 
  113             this.selectedResult = selectedResult;
 
  114             this.aggregateScore = aggregateScore;
 
  115             this.itemName = itemName;
 
  123         List<ResultDisplayAttributes> getAnalysisResults() {
 
  124             return Collections.unmodifiableList(analysisResults);
 
  132         Optional<AnalysisResult> getSelectedResult() {
 
  133             return selectedResult;
 
  141         Optional<Score> getAggregateScore() {
 
  142             return aggregateScore;
 
  150         Optional<String> getItemName() {
 
  164         return (originalAttrStr == null) ? 
"" : originalAttrStr.trim();
 
  175         "AnalysisResultsViewModel_displayAttributes_score=Score",
 
  176         "AnalysisResultsViewModel_displayAttributes_type=Type",
 
  177         "AnalysisResultsViewModel_displayAttributes_configuration=Configuration",
 
  178         "AnalysisResultsViewModel_displayAttributes_conclusion=Conclusion",
 
  179         "AnalysisResultsViewModel_displayAttributes_justification=Justification" 
  187             logger.log(Level.SEVERE, 
"Unable to get type for analysis result with id: " + analysisResult.
getArtifactID(), ex);
 
  191         Stream<Pair<String, String>> baseAnalysisAttrs = Stream.of(
 
  192                 Pair.of(Bundle.AnalysisResultsViewModel_displayAttributes_score(),
 
  194                 Pair.of(Bundle.AnalysisResultsViewModel_displayAttributes_type(),
 
  196                 Pair.of(Bundle.AnalysisResultsViewModel_displayAttributes_configuration(),
 
  198                 Pair.of(Bundle.AnalysisResultsViewModel_displayAttributes_conclusion(),
 
  200                 Pair.of(Bundle.AnalysisResultsViewModel_displayAttributes_justification(),
 
  205         Stream<Pair<String, String>> blackboardAttributes = Stream.empty();
 
  208             blackboardAttributes = analysisResult.
getAttributes().stream()
 
  209                     .filter(attr -> attr != null && attr.getAttributeType() != null && attr.getAttributeType().getDisplayName() != null)
 
  210                     .map(attr -> Pair.of(attr.getAttributeType().getDisplayName(), 
normalizeAttr(attr.getDisplayString())))
 
  211                     .sorted((a, b) -> a.getKey().compareToIgnoreCase(b.getKey()));
 
  213             logger.log(Level.SEVERE, 
"Unable to get attributes for analysis result with id: " + analysisResult.
getArtifactID(), ex);
 
  217         List<Pair<String, String>> allDisplayAttributes = Stream.concat(baseAnalysisAttrs, blackboardAttributes)
 
  218                 .collect(Collectors.toList());
 
  220         return new ResultDisplayAttributes(analysisResult, allDisplayAttributes);
 
  224         return analysisResults.stream()
 
  225                 .filter(ar -> ar != null && ar.getScore() != null)
 
  227                 .sorted((a, b) -> -a.getScore().compareTo(b.getScore()))
 
  229                 .collect(Collectors.toList());
 
  242         if (selectedContent == null) {
 
  245             return ((BlackboardArtifact) selectedContent).getShortDescription();
 
  247             return selectedContent.getName();
 
  259     NodeResults getAnalysisResults(Node node) {
 
  261             return new NodeResults(Collections.emptyList(), Optional.empty(), Optional.empty(), Optional.empty());
 
  264         String contentName = null;
 
  265         AnalysisResult selectedAnalysisResult = null;
 
  266         Score aggregateScore = null;
 
  267         List<AnalysisResult> analysisResults = Collections.emptyList();
 
  268         long selectedObjectId = 0;
 
  270             AnalysisResultItem analysisResultItem = node.getLookup().lookup(AnalysisResultItem.class);
 
  272             if (Objects.nonNull(analysisResultItem)) {
 
  279                 selectedAnalysisResult = analysisResultItem.getTskContent();
 
  280                 selectedObjectId = selectedAnalysisResult.
getId();
 
  281                 analyzedContent = selectedAnalysisResult.
getParent();
 
  288                 TskContentItem<?> contentItem = node.getLookup().lookup(TskContentItem.class);
 
  289                 analyzedContent = contentItem.getTskContent();
 
  290                 selectedObjectId = analyzedContent.
getId();
 
  294             contentName = 
getName(analyzedContent);
 
  296         } 
catch (TskCoreException ex) {
 
  297             logger.log(Level.SEVERE, String.format(
"Error getting analysis result data for selected Content (object ID=%d)", selectedObjectId), ex);
 
  304         return new NodeResults(displayAttributes,
 
  305                 Optional.ofNullable(selectedAnalysisResult),
 
  306                 Optional.ofNullable(aggregateScore),
 
  307                 Optional.ofNullable(contentName));
 
Significance getSignificance()
String normalizeAttr(String originalAttrStr)
String getName(Content selectedContent)
Score getAggregateScore()
ResultDisplayAttributes getDisplayAttributes(AnalysisResult analysisResult)
BlackboardArtifact.Type getType()
String getConfiguration()
List< AnalysisResult > getAllAnalysisResults()
String getJustification()
List< ResultDisplayAttributes > getOrderedDisplayAttributes(Collection< AnalysisResult > analysisResults)
static final Logger logger
List< BlackboardAttribute > getAttributes()