From c5bbe274fba8c75f7223651ab484b521ff171cc0 Mon Sep 17 00:00:00 2001 From: jmillman Date: Wed, 25 May 2016 11:52:49 -0400 Subject: [PATCH] clean up selection management in TimeLineTopComponent and ListTimeline --- .../timeline/TimeLineTopComponent.java | 24 +++++++++---------- .../timeline/ui/listvew/ListTimeline.java | 15 +++++------- 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/timeline/TimeLineTopComponent.java b/Core/src/org/sleuthkit/autopsy/timeline/TimeLineTopComponent.java index 39064cf455..2c97d775f4 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/TimeLineTopComponent.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/TimeLineTopComponent.java @@ -19,7 +19,6 @@ package org.sleuthkit.autopsy.timeline; import java.beans.PropertyVetoException; -import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.logging.Level; @@ -105,29 +104,28 @@ public final class TimeLineTopComponent extends TopComponent implements Explorer switch (controller.getViewMode()) { case LIST: - Children children = new Children.Array(); - ArrayList childList = new ArrayList<>(); - + //make an array of EventNodes for the selected events + EventNode[] childArray = new EventNode[selectedEventIDs.size()]; try { - for (Long t : selectedEventIDs) { - childList.add(EventNode.createEventNode(t, controller.getEventsModel())); + for (int i = 0; i < selectedEventIDs.size(); i++) { + childArray[i] = EventNode.createEventNode(selectedEventIDs.get(i), controller.getEventsModel()); } - EventNode[] toArray = childList.toArray(new EventNode[childList.size()]); - - children.add(toArray); + Children children = new Children.Array(); + children.add(childArray); SwingUtilities.invokeLater(() -> { - //set node as selected for actions + //set generic container node as root context em.setRootContext(new AbstractNode(children)); try { - em.setSelectedNodes(toArray); + //set selected nodes for actions + em.setSelectedNodes(childArray); } catch (PropertyVetoException ex) { //I don't know why this would ever happen. LOGGER.log(Level.SEVERE, "Selecting the event node was vetoed.", ex); // NON-NLS } - //push into content viewer. + //if there is only one event selected push it into content viewer. if (selectedEventIDs.size() == 1) { - contentViewerPanel.setNode(toArray[0]); + contentViewerPanel.setNode(childArray[0]); } else { contentViewerPanel.setNode(null); } diff --git a/Core/src/org/sleuthkit/autopsy/timeline/ui/listvew/ListTimeline.java b/Core/src/org/sleuthkit/autopsy/timeline/ui/listvew/ListTimeline.java index 4dec210e70..4339338210 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/listvew/ListTimeline.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/listvew/ListTimeline.java @@ -18,6 +18,7 @@ */ package org.sleuthkit.autopsy.timeline.ui.listvew; +import com.google.common.collect.FluentIterable; import com.google.common.collect.Iterables; import java.util.ArrayList; import java.util.Arrays; @@ -25,7 +26,6 @@ import java.util.Collection; import java.util.List; import java.util.Objects; import java.util.logging.Level; -import java.util.stream.Collectors; import javafx.application.Platform; import javafx.beans.Observable; import javafx.beans.binding.Bindings; @@ -140,14 +140,11 @@ class ListTimeline extends BorderPane { table.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE); table.getSelectionModel().getSelectedItems().addListener((Observable observable) -> { - if (table.getSelectionModel().getSelectedItems().size() == 1) { - selectedEventIDs.setAll(Iterables.getFirst(table.getSelectionModel().getSelectedItem().getEventIDs(), 0L)); - } else { - selectedEventIDs.setAll(table.getSelectionModel().getSelectedItems().stream() - .filter(Objects::nonNull) - .flatMap(mEvent -> mEvent.getEventIDs().stream()) - .collect(Collectors.toSet())); - } + selectedEventIDs.setAll( + FluentIterable.from(table.getSelectionModel().getSelectedItems()) + .filter(Objects::nonNull) + .transform(MergedEvent::getRepresentitiveEventID) + .toSet()); }); }