diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/AnalysisResultDAO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/AnalysisResultDAO.java index 0589b180e1..7709ac26fb 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/AnalysisResultDAO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/AnalysisResultDAO.java @@ -740,7 +740,7 @@ public class AnalysisResultDAO extends BlackboardArtifactDAO { setMap.computeIfAbsent(Pair.of(art.getArtifactTypeID(), setName), (k) -> new HashSet<>()) .add(art.getDataSourceObjectID()); - } else if (BlackboardArtifact.Category.DATA_ARTIFACT.equals(art.getType().getCategory())) { + } else if (BlackboardArtifact.Category.ANALYSIS_RESULT.equals(art.getType().getCategory())) { analysisResultMap.computeIfAbsent(art.getArtifactTypeID(), (k) -> new HashSet<>()) .add(art.getDataSourceObjectID()); } diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/MainDAO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/MainDAO.java index 48551a565c..72a5011673 100644 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/MainDAO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/MainDAO.java @@ -25,6 +25,7 @@ import com.google.common.collect.ImmutableList; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; +import java.util.Arrays; import java.util.Collection; import java.util.EnumSet; import java.util.List; @@ -33,6 +34,7 @@ import java.util.prefs.PreferenceChangeListener; import java.util.stream.Collectors; import java.util.stream.Stream; import org.apache.commons.collections.CollectionUtils; +import org.python.google.common.collect.ImmutableSet; import org.sleuthkit.autopsy.casemodule.Case; import org.sleuthkit.autopsy.core.UserPreferences; import org.sleuthkit.autopsy.ingest.IngestManager; @@ -43,8 +45,18 @@ import org.sleuthkit.autopsy.ingest.IngestManager; */ public class MainDAO extends AbstractDAO { - private static final Set INGEST_MODULE_EVENTS = EnumSet.of(IngestManager.IngestModuleEvent.CONTENT_CHANGED, IngestManager.IngestModuleEvent.DATA_ADDED); - private static final Set CASE_EVENTS = EnumSet.of(Case.Events.CURRENT_CASE); + private static final Set INGEST_MODULE_EVENTS = EnumSet.of( + IngestManager.IngestModuleEvent.CONTENT_CHANGED, + IngestManager.IngestModuleEvent.DATA_ADDED + ); + + private static final Set QUEUED_CASE_EVENTS = ImmutableSet.of( + Case.Events.OS_ACCOUNTS_ADDED.toString(), + Case.Events.OS_ACCOUNTS_UPDATED.toString(), + Case.Events.OS_ACCOUNTS_DELETED.toString(), + Case.Events.OS_ACCT_INSTANCES_ADDED.toString() + ); + private static final long MILLIS_BATCH = 5000; private static MainDAO instance = null; @@ -64,8 +76,11 @@ public class MainDAO extends AbstractDAO { private final PropertyChangeListener caseEventListener = (evt) -> { if (evt.getPropertyName().equals(Case.Events.CURRENT_CASE.toString())) { this.clearCaches(); + } else if (QUEUED_CASE_EVENTS.contains(evt.getPropertyName())) { + queueAutopsyEvent(evt); } else { - handleAutopsyEvent(evt); + // handle case events immediately + handleAutopsyEvent(Arrays.asList(evt)); } }; @@ -80,7 +95,7 @@ public class MainDAO extends AbstractDAO { * The ingest module event listener. */ private final PropertyChangeListener ingestModuleEventListener = (evt) -> { - handleAutopsyEvent(evt); + queueAutopsyEvent(evt); }; private final PropertyChangeSupport support = new PropertyChangeSupport(this); @@ -166,7 +181,7 @@ public class MainDAO extends AbstractDAO { */ void register() { IngestManager.getInstance().addIngestModuleEventListener(INGEST_MODULE_EVENTS, ingestModuleEventListener); - Case.addEventTypeSubscriber(CASE_EVENTS, caseEventListener); + Case.addPropertyChangeListener(caseEventListener); UserPreferences.addChangeListener(userPreferenceListener); } @@ -180,7 +195,7 @@ public class MainDAO extends AbstractDAO { */ void unregister() { IngestManager.getInstance().removeIngestModuleEventListener(INGEST_MODULE_EVENTS, ingestModuleEventListener); - Case.removeEventTypeSubscriber(CASE_EVENTS, caseEventListener); + Case.removePropertyChangeListener(caseEventListener); UserPreferences.removeChangeListener(userPreferenceListener); } @@ -189,7 +204,7 @@ public class MainDAO extends AbstractDAO { * * @param autopsyEvent The autopsy event. */ - private void handleAutopsyEvent(PropertyChangeEvent autopsyEvent) { + private void queueAutopsyEvent(PropertyChangeEvent autopsyEvent) { this.eventBatcher.queueEvent(autopsyEvent); } } diff --git a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/TagsDAO.java b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/TagsDAO.java index 01ebcd605a..43abd670e1 100755 --- a/Core/src/org/sleuthkit/autopsy/mainui/datamodel/TagsDAO.java +++ b/Core/src/org/sleuthkit/autopsy/mainui/datamodel/TagsDAO.java @@ -327,7 +327,7 @@ public class TagsDAO extends AbstractDAO { .add(Optional.ofNullable(data.getRight())); } } - + // don't continue if no mapping entries if (mapping.isEmpty()) { return Collections.emptyList(); @@ -369,44 +369,35 @@ public class TagsDAO extends AbstractDAO { * from event). */ private Triple getTagData(PropertyChangeEvent evt) { + if (evt instanceof BlackBoardArtifactTagAddedEvent) { + BlackBoardArtifactTagAddedEvent event = (BlackBoardArtifactTagAddedEvent) evt; + // ensure tag added event has a valid content id + if (event.getAddedTag() != null + && event.getAddedTag().getContent() != null + && event.getAddedTag().getArtifact() != null) { + return Triple.of(TagType.RESULT, event.getAddedTag().getName().getId(), event.getAddedTag().getArtifact().getDataSourceObjectID()); + } - String eventType = evt.getPropertyName(); - - if (eventType.equals(Case.Events.BLACKBOARD_ARTIFACT_TAG_ADDED.toString()) - || eventType.equals(Case.Events.BLACKBOARD_ARTIFACT_TAG_DELETED.toString()) - || eventType.equals(Case.Events.CONTENT_TAG_ADDED.toString()) - || eventType.equals(Case.Events.CONTENT_TAG_DELETED.toString())) { - - if (evt instanceof BlackBoardArtifactTagAddedEvent) { - BlackBoardArtifactTagAddedEvent event = (BlackBoardArtifactTagAddedEvent) evt; - // ensure tag added event has a valid content id - if (event.getAddedTag() != null - && event.getAddedTag().getContent() != null - && event.getAddedTag().getArtifact() != null) { - return Triple.of(TagType.RESULT, event.getAddedTag().getName().getId(), event.getAddedTag().getArtifact().getDataSourceObjectID()); - } - - } else if (evt instanceof BlackBoardArtifactTagDeletedEvent) { - BlackBoardArtifactTagDeletedEvent event = (BlackBoardArtifactTagDeletedEvent) evt; - BlackBoardArtifactTagDeletedEvent.DeletedBlackboardArtifactTagInfo deletedTagInfo = event.getDeletedTagInfo(); - if (deletedTagInfo != null) { - return Triple.of(TagType.RESULT, deletedTagInfo.getName().getId(), null); - } - } else if (evt instanceof ContentTagAddedEvent) { - ContentTagAddedEvent event = (ContentTagAddedEvent) evt; - // ensure tag added event has a valid content id - if (event.getAddedTag() != null && event.getAddedTag().getContent() != null) { - Content content = event.getAddedTag().getContent(); - Long dsId = content instanceof AbstractFile ? ((AbstractFile) content).getDataSourceObjectId() : null; - return Triple.of(TagType.FILE, event.getAddedTag().getName().getId(), dsId); - } - } else if (evt instanceof ContentTagDeletedEvent) { - ContentTagDeletedEvent event = (ContentTagDeletedEvent) evt; - // ensure tag deleted event has a valid content id - ContentTagDeletedEvent.DeletedContentTagInfo deletedTagInfo = event.getDeletedTagInfo(); - if (deletedTagInfo != null) { - return Triple.of(TagType.FILE, deletedTagInfo.getName().getId(), null); - } + } else if (evt instanceof BlackBoardArtifactTagDeletedEvent) { + BlackBoardArtifactTagDeletedEvent event = (BlackBoardArtifactTagDeletedEvent) evt; + BlackBoardArtifactTagDeletedEvent.DeletedBlackboardArtifactTagInfo deletedTagInfo = event.getDeletedTagInfo(); + if (deletedTagInfo != null) { + return Triple.of(TagType.RESULT, deletedTagInfo.getName().getId(), null); + } + } else if (evt instanceof ContentTagAddedEvent) { + ContentTagAddedEvent event = (ContentTagAddedEvent) evt; + // ensure tag added event has a valid content id + if (event.getAddedTag() != null && event.getAddedTag().getContent() != null) { + Content content = event.getAddedTag().getContent(); + Long dsId = content instanceof AbstractFile ? ((AbstractFile) content).getDataSourceObjectId() : null; + return Triple.of(TagType.FILE, event.getAddedTag().getName().getId(), dsId); + } + } else if (evt instanceof ContentTagDeletedEvent) { + ContentTagDeletedEvent event = (ContentTagDeletedEvent) evt; + // ensure tag deleted event has a valid content id + ContentTagDeletedEvent.DeletedContentTagInfo deletedTagInfo = event.getDeletedTagInfo(); + if (deletedTagInfo != null) { + return Triple.of(TagType.FILE, deletedTagInfo.getName().getId(), null); } } return null; @@ -418,7 +409,7 @@ public class TagsDAO extends AbstractDAO { public static class TagFetcher extends DAOFetcher { private final TagsDAO dao; - + /** * Main constructor. *