From d48ff720985d640030228551a2dc62ca366898ef Mon Sep 17 00:00:00 2001 From: jmillman Date: Fri, 11 Sep 2015 15:13:26 -0400 Subject: [PATCH] WIP Cleanup, verification that all existing features till work in new alternate layout mode. --- .../timeline/datamodel/EventBundle.java | 11 +- .../timeline/datamodel/EventCluster.java | 12 +- .../timeline/datamodel/EventStripe.java | 15 ++- .../autopsy/timeline/db/EventDB.java | 2 +- .../ui/detailview/DetailViewNode.java | 4 +- .../ui/detailview/DetailViewPane.java | 10 +- .../ui/detailview/EventClusterNode.java | 58 ++++----- .../ui/detailview/EventDetailChart.java | 112 ++++++++++-------- .../ui/detailview/EventStripeNode.java | 70 +++++------ .../tree/EventDescriptionTreeItem.java | 6 +- .../ui/detailview/tree/EventTypeTreeItem.java | 4 +- .../timeline/ui/detailview/tree/NavPanel.java | 6 +- .../timeline/ui/detailview/tree/RootItem.java | 4 +- 13 files changed, 174 insertions(+), 140 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/timeline/datamodel/EventBundle.java b/Core/src/org/sleuthkit/autopsy/timeline/datamodel/EventBundle.java index 0677f86c61..17d5a01e7b 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/datamodel/EventBundle.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/datamodel/EventBundle.java @@ -5,6 +5,7 @@ */ package org.sleuthkit.autopsy.timeline.datamodel; +import com.google.common.collect.Range; import java.util.Set; import org.sleuthkit.autopsy.timeline.datamodel.eventtype.EventType; import org.sleuthkit.autopsy.timeline.zooming.DescriptionLOD; @@ -18,16 +19,18 @@ public interface EventBundle { DescriptionLOD getDescriptionLOD(); - long getEndMillis(); - Set getEventIDs(); Set getEventIDsWithHashHits(); Set getEventIDsWithTags(); + EventType getEventType(); + + long getEndMillis(); + long getStartMillis(); - EventType getType(); - + Iterable> getRanges(); + } diff --git a/Core/src/org/sleuthkit/autopsy/timeline/datamodel/EventCluster.java b/Core/src/org/sleuthkit/autopsy/timeline/datamodel/EventCluster.java index 9a26affa7e..9f5cc5428c 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/datamodel/EventCluster.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/datamodel/EventCluster.java @@ -115,7 +115,7 @@ public class EventCluster implements EventBundle { return description; } - public EventType getType() { + public EventType getEventType() { return type; } @@ -135,7 +135,7 @@ public class EventCluster implements EventBundle { */ public static EventCluster merge(EventCluster aggEvent1, EventCluster ag2) { - if (aggEvent1.getType() != ag2.getType()) { + if (aggEvent1.getEventType() != ag2.getEventType()) { throw new IllegalArgumentException("aggregate events are not compatible they have different types"); } @@ -146,7 +146,7 @@ public class EventCluster implements EventBundle { Sets.SetView hashHitsUnion = Sets.union(aggEvent1.getEventIDsWithHashHits(), ag2.getEventIDsWithHashHits()); Sets.SetView taggedUnion = Sets.union(aggEvent1.getEventIDsWithTags(), ag2.getEventIDsWithTags()); - return new EventCluster(IntervalUtils.span(aggEvent1.span, ag2.span), aggEvent1.getType(), idsUnion, hashHitsUnion, taggedUnion, aggEvent1.getDescription(), aggEvent1.lod); + return new EventCluster(IntervalUtils.span(aggEvent1.span, ag2.span), aggEvent1.getEventType(), idsUnion, hashHitsUnion, taggedUnion, aggEvent1.getDescription(), aggEvent1.lod); } Range getRange() { @@ -156,4 +156,10 @@ public class EventCluster implements EventBundle { return Range.singleton(getStartMillis()); } } + + @Override + public Iterable> getRanges() { + return Collections.singletonList(getRange()); + } + } diff --git a/Core/src/org/sleuthkit/autopsy/timeline/datamodel/EventStripe.java b/Core/src/org/sleuthkit/autopsy/timeline/datamodel/EventStripe.java index 49dd736611..9bd45ce278 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/datamodel/EventStripe.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/datamodel/EventStripe.java @@ -63,7 +63,7 @@ public final class EventStripe implements EventBundle { public EventStripe(EventCluster aggEvent) { spans.add(aggEvent.getRange()); spanMap.put(aggEvent.getRange(), aggEvent); - type = aggEvent.getType(); + type = aggEvent.getEventType(); description = aggEvent.getDescription(); lod = aggEvent.getDescriptionLOD(); eventIDs.addAll(aggEvent.getEventIDs()); @@ -76,7 +76,7 @@ public final class EventStripe implements EventBundle { spans.addAll(v.spans); spanMap.putAll(u.spanMap); spanMap.putAll(v.spanMap); - type = u.getType(); + type = u.getEventType(); description = u.getDescription(); lod = u.getDescriptionLOD(); eventIDs.addAll(u.getEventIDs()); @@ -96,38 +96,47 @@ public final class EventStripe implements EventBundle { return new EventStripe(u, v); } + @Override public String getDescription() { return description; } - public EventType getType() { + @Override + public EventType getEventType() { return type; } + @Override public DescriptionLOD getDescriptionLOD() { return lod; } + @Override public Set getEventIDs() { return Collections.unmodifiableSet(eventIDs); } + @Override public Set getEventIDsWithHashHits() { return Collections.unmodifiableSet(hashHits); } + @Override public Set getEventIDsWithTags() { return Collections.unmodifiableSet(tagged); } + @Override public long getStartMillis() { return spans.span().lowerEndpoint(); } + @Override public long getEndMillis() { return spans.span().upperEndpoint(); } + @Override public Iterable> getRanges() { return spans.asRanges(); } diff --git a/Core/src/org/sleuthkit/autopsy/timeline/db/EventDB.java b/Core/src/org/sleuthkit/autopsy/timeline/db/EventDB.java index 01837e30ca..ec72314dc4 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/db/EventDB.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/db/EventDB.java @@ -1140,7 +1140,7 @@ public class EventDB { Map> typeMap = new HashMap<>(); for (EventCluster aggregateEvent : preMergedEvents) { - typeMap.computeIfAbsent(aggregateEvent.getType(), eventType -> HashMultimap.create()) + typeMap.computeIfAbsent(aggregateEvent.getEventType(), eventType -> HashMultimap.create()) .put(aggregateEvent.getDescription(), aggregateEvent); } //result list to return diff --git a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/DetailViewNode.java b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/DetailViewNode.java index e8a5bb8dcb..efd3a47586 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/DetailViewNode.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/DetailViewNode.java @@ -27,13 +27,13 @@ public interface DetailViewNode> { public void setDescriptionWidth(double max); - public EventType getType(); + public EventType getEventType(); public Set getEventIDs(); public String getDescription(); - public EventBundle getBundleDescriptor(); + public EventBundle getEventBundle(); /** * apply the 'effect' to visually indicate highlighted nodes diff --git a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/DetailViewPane.java b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/DetailViewPane.java index 9118e6872a..5f1d32b083 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/DetailViewPane.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/DetailViewPane.java @@ -70,6 +70,7 @@ import org.sleuthkit.autopsy.coreutils.Logger; import org.sleuthkit.autopsy.coreutils.ThreadConfined; import org.sleuthkit.autopsy.timeline.FXMLConstructor; import org.sleuthkit.autopsy.timeline.TimeLineController; +import org.sleuthkit.autopsy.timeline.datamodel.EventBundle; import org.sleuthkit.autopsy.timeline.datamodel.EventCluster; import org.sleuthkit.autopsy.timeline.datamodel.FilteredEventsModel; import org.sleuthkit.autopsy.timeline.datamodel.eventtype.EventType; @@ -100,7 +101,7 @@ import org.sleuthkit.autopsy.timeline.utils.RangeDivisionInfo; * TODO: refactor common code out of this class and CountsChartPane into * {@link AbstractVisualization} */ -public class DetailViewPane extends AbstractVisualization, EventDetailChart> { +public class DetailViewPane extends AbstractVisualization { private final static Logger LOGGER = Logger.getLogger(CountsViewPane.class.getName()); @@ -336,7 +337,7 @@ public class DetailViewPane extends AbstractVisualization { if (isCancelled() == false) { - getSeries(e.getType()).getData().add(xyData); + getSeries(e.getEventType()).getData().add(xyData); } }); } @@ -357,8 +358,9 @@ public class DetailViewPane extends AbstractVisualization c1, Boolean applied) { - c1.applySelectionEffect(applied); + protected void applySelectionEffect(EventBundle c1, Boolean selected) { + chart.applySelectionEffect(c1, selected); + } private class DetailViewSettingsPane extends HBox { diff --git a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/EventClusterNode.java b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/EventClusterNode.java index 133ab3e511..20baf039b1 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/EventClusterNode.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/EventClusterNode.java @@ -99,7 +99,7 @@ public class EventClusterNode extends StackPane implements DetailViewNode hashSetCounts = new HashMap<>(); - if (!aggEvent.getEventIDsWithHashHits().isEmpty()) { + if (!eventCluster.getEventIDsWithHashHits().isEmpty()) { hashSetCounts = new HashMap<>(); try { - for (TimeLineEvent tle : eventsModel.getEventsById(aggEvent.getEventIDsWithHashHits())) { + for (TimeLineEvent tle : eventsModel.getEventsById(eventCluster.getEventIDsWithHashHits())) { Set hashSetNames = sleuthkitCase.getAbstractFileById(tle.getFileID()).getHashSetNames(); for (String hashSetName : hashSetNames) { hashSetCounts.merge(hashSetName, 1L, Long::sum); @@ -298,8 +298,8 @@ public class EventClusterNode extends StackPane implements DetailViewNode tagCounts = new HashMap<>(); - if (!aggEvent.getEventIDsWithTags().isEmpty()) { - tagCounts.putAll(eventsModel.getTagCountsByTagName(aggEvent.getEventIDsWithTags())); + if (!eventCluster.getEventIDsWithTags().isEmpty()) { + tagCounts.putAll(eventsModel.getTagCountsByTagName(eventCluster.getEventIDsWithTags())); } @@ -312,7 +312,7 @@ public class EventClusterNode extends StackPane implements DetailViewNode> loggedTask = new LoggedTask>( @@ -523,11 +523,11 @@ public class EventClusterNode extends StackPane implements DetailViewNode 1) { final DescriptionLOD next = descLOD.get().next(); if (next != null) { @@ -535,7 +535,7 @@ public class EventClusterNode extends StackPane implements DetailViewNode impl /** * map from event to node */ - private final Map nodeMap = new HashMap<>(); + private final Map clusterNodeMap = new HashMap<>(); private final Map, EventStripe> stripeDescMap = new HashMap<>(); private final Map stripeNodeMap = new HashMap<>(); /** @@ -168,7 +167,7 @@ public final class EventDetailChart extends XYChart impl */ private final SimpleBooleanProperty oneEventPerRow = new SimpleBooleanProperty(false); - private final ObservableMap, Line> projectionMap = FXCollections.observableHashMap(); + private final Map, Line> projectionMap = new HashMap<>(); /** * flag indicating whether this chart actually needs a layout pass @@ -176,7 +175,7 @@ public final class EventDetailChart extends XYChart impl @GuardedBy(value = "this") private boolean requiresLayout = true; - final ObservableList> selectedNodes; + final ObservableList selectedBundles; /** * list of series of data added to this chart TODO: replace this with a map @@ -206,11 +205,11 @@ public final class EventDetailChart extends XYChart impl private final SimpleDoubleProperty truncateWidth = new SimpleDoubleProperty(200.0); private final SimpleBooleanProperty alternateLayout = new SimpleBooleanProperty(true); - EventDetailChart(DateAxis dateAxis, final Axis verticalAxis, ObservableList> selectedNodes) { + EventDetailChart(DateAxis dateAxis, final Axis verticalAxis, ObservableList selectedNodes) { super(dateAxis, verticalAxis); dateAxis.setAutoRanging(false); - //yAxis.setVisible(false);//TODO: why doesn't this hide the vertical axis, instead we have to turn off all parts individually? -jm + //verticalAxis.setVisible(false);//TODO: why doesn't this hide the vertical axis, instead we have to turn off all parts individually? -jm verticalAxis.setTickLabelsVisible(false); verticalAxis.setTickMarkVisible(false); @@ -224,7 +223,6 @@ public final class EventDetailChart extends XYChart impl //bind listener to events that should trigger layout widthProperty().addListener(layoutInvalidationListener); heightProperty().addListener(layoutInvalidationListener); -// boundsInLocalProperty().addListener(layoutInvalidationListener); bandByType.addListener(layoutInvalidationListener); oneEventPerRow.addListener(layoutInvalidationListener); @@ -286,34 +284,41 @@ public final class EventDetailChart extends XYChart impl setOnMouseReleased(dragHandler); setOnMouseDragged(dragHandler); - projectionMap.addListener((MapChangeListener.Change, ? extends Line> change) -> { - final Line valueRemoved = change.getValueRemoved(); - if (valueRemoved != null) { - getChartChildren().removeAll(valueRemoved); - } - final Line valueAdded = change.getValueAdded(); - if (valueAdded != null) { - getChartChildren().add(valueAdded); - } - }); - - this.selectedNodes = selectedNodes; - this.selectedNodes.addListener(( - ListChangeListener.Change> c) -> { +// projectionMap.addListener((MapChangeListener.Change, ? extends Line> change) -> { +// final Line valueRemoved = change.getValueRemoved(); +// if (valueRemoved != null) { +// getChartChildren().removeAll(valueRemoved); +// } +// final Line valueAdded = change.getValueAdded(); +// if (valueAdded != null) { +// getChartChildren().add(valueAdded); +// } +// }); + this.selectedBundles = selectedNodes; + this.selectedBundles.addListener(( + ListChangeListener.Change c) -> { while (c.next()) { - c.getRemoved().forEach((DetailViewNode t) -> { - projectionMap.remove(t); - }); - c.getAddedSubList().forEach((DetailViewNode t) -> { - Line line = new Line(dateAxis.localToParent(dateAxis.getDisplayPosition(new DateTime(t.getStartMillis(), TimeLineController.getJodaTimeZone())), 0).getX(), dateAxis.getLayoutY() + PROJECTED_LINE_Y_OFFSET, - dateAxis.localToParent(dateAxis.getDisplayPosition(new DateTime(t.getEndMillis(), TimeLineController.getJodaTimeZone())), 0).getX(), dateAxis.getLayoutY() + PROJECTED_LINE_Y_OFFSET - ); - line.setStroke(t.getType().getColor().deriveColor(0, 1, 1, .5)); - line.setStrokeWidth(PROJECTED_LINE_STROKE_WIDTH); - line.setStrokeLineCap(StrokeLineCap.ROUND); - projectionMap.put(t, line); - }); + c.getRemoved().forEach((EventBundle t) -> { + t.getRanges().forEach((Range t1) -> { + Line removeAll = projectionMap.remove(t1); + getChartChildren().removeAll(removeAll); + }); + }); + c.getAddedSubList().forEach((EventBundle t) -> { + + for (Range r : t.getRanges()) { + + Line line = new Line(dateAxis.localToParent(dateAxis.getDisplayPosition(new DateTime(r.lowerEndpoint(), TimeLineController.getJodaTimeZone())), 0).getX(), dateAxis.getLayoutY() + PROJECTED_LINE_Y_OFFSET, + dateAxis.localToParent(dateAxis.getDisplayPosition(new DateTime(r.upperEndpoint(), TimeLineController.getJodaTimeZone())), 0).getX(), dateAxis.getLayoutY() + PROJECTED_LINE_Y_OFFSET + ); + line.setStroke(t.getEventType().getColor().deriveColor(0, 1, 1, .5)); + line.setStrokeWidth(PROJECTED_LINE_STROKE_WIDTH); + line.setStrokeLineCap(StrokeLineCap.ROUND); + projectionMap.put(r, line); + getChartChildren().add(line); + } + }); } this.controller.selectEventIDs(selectedNodes.stream() @@ -348,7 +353,7 @@ public final class EventDetailChart extends XYChart impl clearGuideLine(); clearIntervalSelector(); - selectedNodes.clear(); + selectedBundles.clear(); projectionMap.clear(); controller.selectEventIDs(Collections.emptyList()); }); @@ -411,7 +416,7 @@ public final class EventDetailChart extends XYChart impl protected synchronized void dataItemAdded(Series series, int i, Data data) { final EventCluster aggEvent = data.getYValue(); if (alternateLayout.get()) { - EventStripe eventCluster = stripeDescMap.merge(ImmutablePair.of(aggEvent.getType(), aggEvent.getDescription()), + EventStripe eventCluster = stripeDescMap.merge(ImmutablePair.of(aggEvent.getEventType(), aggEvent.getDescription()), new EventStripe(aggEvent), (EventStripe u, EventStripe v) -> { EventStripeNode remove = stripeNodeMap.remove(u); @@ -425,10 +430,10 @@ public final class EventDetailChart extends XYChart impl stripeNodeMap.put(eventCluster, clusterNode); nodeGroup.getChildren().add(clusterNode); } else { - nodeMap.computeIfAbsent(aggEvent, (EventCluster t) -> { + clusterNodeMap.computeIfAbsent(aggEvent, (EventCluster t) -> { EventClusterNode eventNode = new EventClusterNode(aggEvent, null, EventDetailChart.this); eventNode.setLayoutX(getXAxis().getDisplayPosition(new DateTime(aggEvent.getSpan().getStartMillis()))); - nodeMap.put(aggEvent, eventNode); + clusterNodeMap.put(aggEvent, eventNode); nodeGroup.getChildren().add(eventNode); return eventNode; }); @@ -444,10 +449,10 @@ public final class EventDetailChart extends XYChart impl @Override protected synchronized void dataItemRemoved(Data data, Series series) { EventCluster aggEvent = data.getYValue(); - Node removedNode = nodeMap.remove(aggEvent); + Node removedNode = clusterNodeMap.remove(aggEvent); nodeGroup.getChildren().remove(removedNode); - EventStripe removedCluster = stripeDescMap.remove(ImmutablePair.of(aggEvent.getType(), aggEvent.getDescription())); + EventStripe removedCluster = stripeDescMap.remove(ImmutablePair.of(aggEvent.getEventType(), aggEvent.getDescription())); removedNode = stripeNodeMap.remove(removedCluster); nodeGroup.getChildren().remove(removedNode); @@ -490,7 +495,7 @@ public final class EventDetailChart extends XYChart impl nodes.sort(Comparator.comparing(DetailViewNode::getStartMillis)); layoutNodes(nodes, minY, 0); } else { - List nodes = new ArrayList<>(nodeMap.values()); + List nodes = new ArrayList<>(clusterNodeMap.values()); nodes.sort(Comparator.comparing(DetailViewNode::getStartMillis)); layoutNodes(nodes, minY, 0); } @@ -500,7 +505,7 @@ public final class EventDetailChart extends XYChart impl if (alternateLayout.get() == true) { List nodes = s.getData().stream() .map(Data::getYValue) - .map(cluster -> stripeDescMap.get(ImmutablePair.of(cluster.getType(), cluster.getDescription()))) + .map(cluster -> stripeDescMap.get(ImmutablePair.of(cluster.getEventType(), cluster.getDescription()))) .distinct() .sorted(Comparator.comparing(EventStripe::getStartMillis)) .map(stripeNodeMap::get) @@ -509,7 +514,7 @@ public final class EventDetailChart extends XYChart impl } else { List nodes = s.getData().stream() .map(Data::getYValue) - .map(nodeMap::get) + .map(clusterNodeMap::get) .filter(Objects::nonNull) .sorted(Comparator.comparing(EventClusterNode::getStartMillis)) .collect(Collectors.toList()); @@ -553,7 +558,7 @@ public final class EventDetailChart extends XYChart impl Iterable> getNodes(Predicate> p) { Collection> values = alternateLayout.get() ? stripeNodeMap.values() - : nodeMap.values(); + : clusterNodeMap.values(); //collapse tree of DetailViewNoeds to list and then filter on given predicate return values.stream() @@ -626,7 +631,7 @@ public final class EventDetailChart extends XYChart impl List spanWidths = new ArrayList<>(); double x = getXAxis().getDisplayPosition(new DateTime(cn.getStartMillis()));; double x2; - Iterator> ranges = cn.getCluster().getRanges().iterator(); + Iterator> ranges = cn.getStripe().getRanges().iterator(); Range range = ranges.next(); do { x2 = getXAxis().getDisplayPosition(new DateTime(range.upperEndpoint())); @@ -708,12 +713,12 @@ public final class EventDetailChart extends XYChart impl private static final int DEFAULT_ROW_HEIGHT = 24; private void layoutProjectionMap() { - for (final Map.Entry, Line> entry : projectionMap.entrySet()) { - final DetailViewNode aggNode = entry.getKey(); + for (final Map.Entry, Line> entry : projectionMap.entrySet()) { + final Range eventBundle = entry.getKey(); final Line line = entry.getValue(); - line.setStartX(getParentXForValue(new DateTime(aggNode.getStartMillis(), TimeLineController.getJodaTimeZone()))); - line.setEndX(getParentXForValue(new DateTime(aggNode.getEndMillis(), TimeLineController.getJodaTimeZone()))); + line.setStartX(getParentXForValue(new DateTime(eventBundle.lowerEndpoint(), TimeLineController.getJodaTimeZone()))); + line.setEndX(getParentXForValue(new DateTime(eventBundle.upperEndpoint(), TimeLineController.getJodaTimeZone()))); line.setStartY(getXAxis().getLayoutY() + PROJECTED_LINE_Y_OFFSET); line.setEndY(getXAxis().getLayoutY() + PROJECTED_LINE_Y_OFFSET); } @@ -791,4 +796,13 @@ public final class EventDetailChart extends XYChart impl protected void requestChartLayout() { super.requestChartLayout(); } + + void applySelectionEffect(EventBundle c1, Boolean selected) { + if (alternateLayout.get()) { + EventStripe eventStripe = stripeDescMap.get(ImmutablePair.of(c1.getEventType(), c1.getDescription())); + stripeNodeMap.get(eventStripe).applySelectionEffect(selected); + } else { + clusterNodeMap.get(c1).applySelectionEffect(selected); + } + } } diff --git a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/EventStripeNode.java b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/EventStripeNode.java index 3953b2baba..4e03ff342d 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/EventStripeNode.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/EventStripeNode.java @@ -75,7 +75,7 @@ public class EventStripeNode extends StackPane implements DetailViewNode descLOD = new SimpleObjectProperty<>(); @@ -124,23 +124,23 @@ public class EventStripeNode extends StackPane implements DetailViewNode r : cluster.getRanges()) { + for (Range r : eventStripe.getRanges()) { Region spanRegion = new Region(); spanRegion.setStyle("-fx-border-width:2 1 2 1; -fx-border-radius: 1; -fx-border-color: " + ColorUtilities.getRGBCode(evtColor.deriveColor(0, 1, 1, .3)) + ";"); // NON-NLS spanRegion.setBackground(spanFill); @@ -162,7 +162,7 @@ public class EventStripeNode extends StackPane implements DetailViewNode { final DescriptionLOD next = descLOD.get().next(); @@ -228,7 +228,7 @@ public class EventStripeNode extends StackPane implements DetailViewNode 1) { final DescriptionLOD next = descLOD.get().next(); if (next != null) { @@ -310,20 +310,20 @@ public class EventStripeNode extends StackPane implements DetailViewNode getEventIDs() { - return cluster.getEventIDs(); + return eventStripe.getEventIDs(); } private static final Border selectionBorder = new Border(new BorderStroke(Color.BLACK, BorderStrokeStyle.SOLID, CORNER_RADII, new BorderWidths(2))); @@ -352,25 +352,25 @@ public class EventStripeNode extends StackPane implements DetailViewNode> loggedTask = new LoggedTask>( diff --git a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/EventDescriptionTreeItem.java b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/EventDescriptionTreeItem.java index f2f5a7b1da..69fdd1fe43 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/EventDescriptionTreeItem.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/EventDescriptionTreeItem.java @@ -29,7 +29,7 @@ import org.sleuthkit.autopsy.timeline.datamodel.EventBundle; class EventDescriptionTreeItem extends NavTreeItem { public EventDescriptionTreeItem(EventCluster g) { - setValue(new NavTreeNode(g.getType().getBaseType(), g.getDescription(), g.getEventIDs().size())); + setValue(new NavTreeNode(g.getEventType().getBaseType(), g.getDescription(), g.getEventIDs().size())); } @Override @@ -40,7 +40,7 @@ class EventDescriptionTreeItem extends NavTreeItem { @Override public void insert(EventCluster g) { NavTreeNode value = getValue(); - if ((value.getType().getBaseType().equals(g.getType().getBaseType()) == false) || ((value.getDescription().equals(g.getDescription()) == false))) { + if ((value.getType().getBaseType().equals(g.getEventType().getBaseType()) == false) || ((value.getDescription().equals(g.getDescription()) == false))) { throw new IllegalArgumentException(); } @@ -54,7 +54,7 @@ class EventDescriptionTreeItem extends NavTreeItem { @Override public TreeItem findTreeItemForEvent(EventBundle t) { - if (getValue().getType().getBaseType() == t.getType().getBaseType() && getValue().getDescription().equals(t.getDescription())) { + if (getValue().getType().getBaseType() == t.getEventType().getBaseType() && getValue().getDescription().equals(t.getDescription())) { return this; } return null; diff --git a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/EventTypeTreeItem.java b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/EventTypeTreeItem.java index d9508cfd4d..fb2947bc42 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/EventTypeTreeItem.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/EventTypeTreeItem.java @@ -37,7 +37,7 @@ class EventTypeTreeItem extends NavTreeItem { private final Comparator> comparator = TreeComparator.Description; EventTypeTreeItem(EventCluster g) { - setValue(new NavTreeNode(g.getType().getBaseType(), g.getType().getBaseType().getDisplayName(), 0)); + setValue(new NavTreeNode(g.getEventType().getBaseType(), g.getEventType().getBaseType().getDisplayName(), 0)); } @Override @@ -79,7 +79,7 @@ class EventTypeTreeItem extends NavTreeItem { @Override public TreeItem findTreeItemForEvent(EventBundle t) { - if (t.getType().getBaseType() == getValue().getType().getBaseType()) { + if (t.getEventType().getBaseType() == getValue().getType().getBaseType()) { for (TreeItem child : getChildren()) { final TreeItem findTreeItemForEvent = ((NavTreeItem) child).findTreeItemForEvent(t); diff --git a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/NavPanel.java b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/NavPanel.java index 8718b6f90c..898917ae15 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/NavPanel.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/NavPanel.java @@ -41,9 +41,9 @@ import org.openide.util.NbBundle; import org.sleuthkit.autopsy.timeline.FXMLConstructor; import org.sleuthkit.autopsy.timeline.TimeLineController; import org.sleuthkit.autopsy.timeline.TimeLineView; +import org.sleuthkit.autopsy.timeline.datamodel.EventBundle; import org.sleuthkit.autopsy.timeline.datamodel.EventCluster; import org.sleuthkit.autopsy.timeline.datamodel.FilteredEventsModel; -import org.sleuthkit.autopsy.timeline.ui.detailview.DetailViewNode; import org.sleuthkit.autopsy.timeline.ui.detailview.DetailViewPane; /** @@ -91,8 +91,8 @@ public class NavPanel extends BorderPane implements TimeLineView { }); detailViewPane.getSelectedNodes().addListener((Observable observable) -> { eventsTree.getSelectionModel().clearSelection(); - detailViewPane.getSelectedNodes().forEach((DetailViewNode t) -> { - eventsTree.getSelectionModel().select(((NavTreeItem) eventsTree.getRoot()).findTreeItemForEvent(t.getBundleDescriptor())); + detailViewPane.getSelectedNodes().forEach((EventBundle t) -> { + eventsTree.getSelectionModel().select(((NavTreeItem) eventsTree.getRoot()).findTreeItemForEvent(t)); }); }); diff --git a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/RootItem.java b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/RootItem.java index 38a9547cba..cb15a0b622 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/RootItem.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/RootItem.java @@ -59,11 +59,11 @@ class RootItem extends NavTreeItem { @Override public void insert(EventCluster g) { - EventTypeTreeItem treeItem = childMap.get(g.getType().getBaseType()); + EventTypeTreeItem treeItem = childMap.get(g.getEventType().getBaseType()); if (treeItem == null) { final EventTypeTreeItem newTreeItem = new EventTypeTreeItem(g); newTreeItem.setExpanded(true); - childMap.put(g.getType().getBaseType(), newTreeItem); + childMap.put(g.getEventType().getBaseType(), newTreeItem); newTreeItem.insert(g); Platform.runLater(() -> {