From 48d455bf29e5806ac413c45309590a7ce9cfe97f Mon Sep 17 00:00:00 2001 From: jmillman Date: Thu, 18 Jun 2015 15:20:02 -0400 Subject: [PATCH] more tag/category autopsy integeration update CategoryCounts, FollowUp and Category border on general Tag Event use most severe category if multiple categories are present for a file enforce category ordering via enum declaration order --- .../imagegallery/datamodel/Category.java | 9 +++++--- .../imagegallery/datamodel/DrawableFile.java | 7 +++--- .../imagegallery/gui/DrawableView.java | 22 +++++++++++-------- .../imagegallery/gui/DrawableViewBase.java | 6 ++--- .../imagegallery/gui/MetaDataPane.java | 4 ++-- .../imagegallery/gui/SummaryTablePane.java | 5 +---- 6 files changed, 28 insertions(+), 25 deletions(-) diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/datamodel/Category.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/datamodel/Category.java index ee6a46098e..aed95afec6 100644 --- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/datamodel/Category.java +++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/datamodel/Category.java @@ -28,14 +28,17 @@ import org.sleuthkit.datamodel.TagName; /** * Enum to represent the six categories in the DHs image categorization scheme. */ -public enum Category implements Comparable { +public enum Category { - ZERO(Color.LIGHTGREY, 0, "CAT-0: Uncategorized"), + /* This order of declaration is required so that Enum's compareTo method + * preserves the fact that lower category numbers are first/most sever, + * except 0 which is last */ ONE(Color.RED, 1, "CAT-1: Child Exploitation (Illegal)"), TWO(Color.ORANGE, 2, "CAT-2: Child Exploitation (Non-Illegal/Age Difficult)"), THREE(Color.YELLOW, 3, "CAT-3: CGI/Animation (Child Exploitive)"), FOUR(Color.BISQUE, 4, "CAT-4: Exemplar/Comparison (Internal Use Only)"), - FIVE(Color.GREEN, 5, "CAT-5: Non-pertinent"); + FIVE(Color.GREEN, 5, "CAT-5: Non-pertinent"), + ZERO(Color.LIGHTGREY, 0, "CAT-0: Uncategorized"); /** map from displayName to enum value */ private static final Map nameMap diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/datamodel/DrawableFile.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/datamodel/DrawableFile.java index 4d3de0d553..3890ca577a 100644 --- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/datamodel/DrawableFile.java +++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/datamodel/DrawableFile.java @@ -268,22 +268,21 @@ public abstract class DrawableFile extends AbstractFile return category; } - public void updateCategory() { + /** set the category property to the most severe one found */ + private void updateCategory() { try { category.set(getSleuthkitCase().getContentTagsByContent(this).stream() .map(Tag::getName).filter(Category::isCategoryTagName) - .findFirst() .map(TagName::getDisplayName) .map(Category::fromDisplayName) + .sorted().findFirst() //sort by severity and take the first .orElse(Category.ZERO) ); - } catch (TskCoreException ex) { Logger.getLogger(DrawableFile.class.getName()).log(Level.WARNING, "problem looking up category for file " + this.getName(), ex); } catch (IllegalStateException ex) { // We get here many times if the case is closed during ingest, so don't print out a ton of warnings. } - } public abstract Image getThumbnail(); diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/DrawableView.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/DrawableView.java index 93dbae801e..99d8671a63 100644 --- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/DrawableView.java +++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/DrawableView.java @@ -108,15 +108,19 @@ public interface DrawableView { @ThreadConfined(type = ThreadConfined.ThreadType.ANY) default Category updateCategoryBorder() { - final Category category = getFile().getCategory(); - final Border border = hasHashHit() && (category == Category.ZERO) - ? HASH_BORDER - : getCategoryBorder(category); + if (getFile() != null) { + final Category category = getFile().getCategory(); + final Border border = hasHashHit() && (category == Category.ZERO) + ? HASH_BORDER + : getCategoryBorder(category); - Platform.runLater(() -> { - getCategoryBorderRegion().setBorder(border); - getCategoryBorderRegion().requestLayout(); - }); - return category; + Platform.runLater(() -> { + getCategoryBorderRegion().setBorder(border); + getCategoryBorderRegion().requestLayout(); + }); + return category; + } else { + return Category.ZERO; + } } } diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/DrawableViewBase.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/DrawableViewBase.java index 52ac70def0..38c48c2951 100644 --- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/DrawableViewBase.java +++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/DrawableViewBase.java @@ -2,7 +2,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2013-14 Basis Technology Corp. + * Copyright 2013-15 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -302,7 +302,7 @@ public abstract class DrawableViewBase extends AnchorPane implements DrawableVie @Override synchronized public void handleTagsChanged(TagsChangeEvent evnt) { - if (fileID != null && evnt.getFileIDs().contains(fileID)) { + if (fileID != null && (evnt.getFileIDs().contains(fileID) || evnt.getFileIDs().contains(-1L))) { updateFollowUpIcon(); } } @@ -386,7 +386,7 @@ public abstract class DrawableViewBase extends AnchorPane implements DrawableVie @Subscribe @Override synchronized public void handleCategoryChanged(CategoryChangeEvent evt) { - if (evt.getFileIDs().contains(getFileID())) { + if (evt.getFileIDs().contains(getFileID()) || evt.getFileIDs().contains(-1L)) { updateCategoryBorder(); } } diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/MetaDataPane.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/MetaDataPane.java index 4ab6fff208..4f4cace550 100644 --- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/MetaDataPane.java +++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/MetaDataPane.java @@ -225,7 +225,7 @@ public class MetaDataPane extends AnchorPane implements DrawableView { @Subscribe @Override public void handleCategoryChanged(CategoryChangeEvent evt) { - if (getFile() != null && evt.getFileIDs().contains(getFileID())) { + if (getFile() != null && (evt.getFileIDs().contains(-1L) || evt.getFileIDs().contains(getFileID()))) { updateUI(); } } @@ -233,7 +233,7 @@ public class MetaDataPane extends AnchorPane implements DrawableView { @Override @Subscribe public void handleTagsChanged(TagsChangeEvent evt) { - if (getFile() != null && evt.getFileIDs().contains(getFileID())) { + if (getFile() != null && (evt.getFileIDs().contains(-1L) || evt.getFileIDs().contains(getFileID()))) { updateUI(); } } diff --git a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/SummaryTablePane.java b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/SummaryTablePane.java index 2710020c45..955cf0760f 100644 --- a/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/SummaryTablePane.java +++ b/ImageGallery/src/org/sleuthkit/autopsy/imagegallery/gui/SummaryTablePane.java @@ -75,6 +75,7 @@ public class SummaryTablePane extends AnchorPane { //register for category events controller.getCategoryManager().registerListener(this); + handleCategoryChanged(null); } public SummaryTablePane(ImageGalleryController controller) { @@ -88,10 +89,6 @@ public class SummaryTablePane extends AnchorPane { */ @Subscribe public void handleCategoryChanged(CategoryChangeEvent evt) { - refresh(); - } - - public void refresh() { final ObservableList> data = FXCollections.observableArrayList(); if (Case.isCaseOpen()) { for (Category cat : Category.values()) {