51 static class ResultDisplayAttributes {
53 private final AnalysisResult analysisResult;
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);
83 AnalysisResult getAnalysisResult() {
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"
185 type =
normalizeAttr(analysisResult.getType().getDisplayName());
186 }
catch (TskCoreException ex) {
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(),
193 normalizeAttr(analysisResult.getScore().getSignificance().getDisplayName())),
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()));
212 }
catch (TskCoreException ex) {
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());
241 private String
getName(Content selectedContent)
throws TskCoreException {
242 if (selectedContent ==
null) {
244 }
else if (selectedContent instanceof BlackboardArtifact) {
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);
271 Content analyzedContent;
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();
292 aggregateScore = analyzedContent.getAggregateScore();
293 analysisResults = analyzedContent.getAllAnalysisResults();
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));
List< ResultDisplayAttributes > getOrderedDisplayAttributes(Collection< AnalysisResult > analysisResults)