From 395f248a06231e764a2b09f7985c2cf26ad4bedd Mon Sep 17 00:00:00 2001 From: jmillman Date: Wed, 13 Apr 2016 16:43:54 -0400 Subject: [PATCH] fix another bug in EventsTree and make it more general (takes TimeLineEvent instead of EventStripe) --- .../timeline/datamodel/EventCluster.java | 5 +++ .../timeline/datamodel/SingleEvent.java | 23 ++++++++++++- .../timeline/datamodel/TimeLineEvent.java | 3 ++ .../ui/detailview/DetailViewPane.java | 7 ++-- .../timeline/ui/detailview/DetailsChart.java | 15 +++++---- .../ui/detailview/EventClusterNode.java | 9 ++--- .../ui/detailview/EventStripeNode.java | 2 +- .../ui/detailview/tree/BaseTypeTreeItem.java | 13 ++++---- .../tree/EventDescriptionTreeItem.java | 25 +++++++------- .../ui/detailview/tree/EventTypeTreeItem.java | 21 +++++++++--- .../ui/detailview/tree/EventsTree.java | 4 +-- .../ui/detailview/tree/EventsTreeItem.java | 7 ++-- .../timeline/ui/detailview/tree/RootItem.java | 12 +++---- .../ui/detailview/tree/SubTypeTreeItem.java | 33 ++++++++++++++----- 14 files changed, 122 insertions(+), 57 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/timeline/datamodel/EventCluster.java b/Core/src/org/sleuthkit/autopsy/timeline/datamodel/EventCluster.java index c8f51247ba..9c5986c46b 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/datamodel/EventCluster.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/datamodel/EventCluster.java @@ -132,6 +132,11 @@ public class EventCluster implements MultiEvent { return Optional.ofNullable(parent); } + @Override + public Optional getParentStripe() { + return getParent(); + } + public Interval getSpan() { return span; } diff --git a/Core/src/org/sleuthkit/autopsy/timeline/datamodel/SingleEvent.java b/Core/src/org/sleuthkit/autopsy/timeline/datamodel/SingleEvent.java index 94c425cf4c..14517d768b 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/datamodel/SingleEvent.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/datamodel/SingleEvent.java @@ -22,6 +22,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSortedSet; import java.util.Collections; import java.util.Comparator; +import java.util.Optional; import java.util.Set; import java.util.SortedSet; import javax.annotation.Nullable; @@ -50,10 +51,12 @@ public class SingleEvent implements TimeLineEvent { private final boolean hashHit; private final boolean tagged; + private MultiEvent parent = null; + public SingleEvent(long eventID, long dataSourceID, long objID, @Nullable Long artifactID, long time, EventType type, String fullDescription, String medDescription, String shortDescription, TskData.FileKnown known, boolean hashHit, boolean tagged) { this.eventID = eventID; this.fileID = objID; - this.artifactID = artifactID == 0 ? null : artifactID; + this.artifactID = (artifactID == null || artifactID == 0) ? null : artifactID; this.time = time; this.subType = type; descriptions = ImmutableMap.of(DescriptionLoD.FULL, fullDescription, @@ -66,6 +69,12 @@ public class SingleEvent implements TimeLineEvent { this.dataSourceID = dataSourceID; } + public SingleEvent withParent(MultiEvent newParent) { + SingleEvent singleEvent = new SingleEvent(eventID, dataSourceID, fileID, artifactID, time, subType, descriptions.get(DescriptionLoD.FULL), descriptions.get(DescriptionLoD.MEDIUM), descriptions.get(DescriptionLoD.SHORT), known, hashHit, tagged); + singleEvent.parent = newParent; + return singleEvent; + } + public boolean isTagged() { return tagged; } @@ -94,6 +103,7 @@ public class SingleEvent implements TimeLineEvent { return time; } + @Override public EventType getEventType() { return subType; } @@ -184,4 +194,15 @@ public class SingleEvent implements TimeLineEvent { public DescriptionLoD getDescriptionLoD() { return DescriptionLoD.FULL; } + + @Override + public Optional getParentStripe() { + if (parent == null) { + return Optional.empty(); + } else if (parent instanceof EventStripe) { + return Optional.of((EventStripe) parent); + } else { + return parent.getParentStripe(); + } + } } diff --git a/Core/src/org/sleuthkit/autopsy/timeline/datamodel/TimeLineEvent.java b/Core/src/org/sleuthkit/autopsy/timeline/datamodel/TimeLineEvent.java index 49aec1f00d..4e92ff33c8 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/datamodel/TimeLineEvent.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/datamodel/TimeLineEvent.java @@ -18,6 +18,7 @@ */ package org.sleuthkit.autopsy.timeline.datamodel; +import java.util.Optional; import java.util.Set; import java.util.SortedSet; import org.sleuthkit.autopsy.timeline.datamodel.eventtype.EventType; @@ -32,6 +33,8 @@ public interface TimeLineEvent { public DescriptionLoD getDescriptionLoD(); + public Optional getParentStripe(); + Set getEventIDs(); Set getEventIDsWithHashHits(); 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 52ded83f90..d4ece3cfb2 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/DetailViewPane.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/DetailViewPane.java @@ -114,8 +114,11 @@ public class DetailViewPane extends AbstractVisualizationPane getAllEventStripes() { - return chart.getAllNestedEventStripes(); + /* + * gets the tree of event stripes flattened into a list + */ + public ObservableList getAllNestedEvents() { + return chart.getAllNestedEvents(); } public ObservableList getSelectedEvents() { diff --git a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/DetailsChart.java b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/DetailsChart.java index 5b9f1687bb..de5becc0b6 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/DetailsChart.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/DetailsChart.java @@ -66,7 +66,7 @@ public final class DetailsChart extends Control implements TimeLineChart> selectedNodes; private final DetailsChartLayoutSettings layoutSettings = new DetailsChartLayoutSettings(); private final TimeLineController controller; - private final ObservableList nestedEventStripes = FXCollections.observableArrayList(); + private final ObservableList nestedEvents = FXCollections.observableArrayList(); @ThreadConfined(type = ThreadConfined.ThreadType.JFX) private final ObservableList eventStripes = FXCollections.observableArrayList(); @@ -103,7 +103,7 @@ public final class DetailsChart extends Control implements TimeLineChart getAllNestedEventStripes() { - return nestedEventStripes; + /* + * gets the tree of event stripes flattened into a list + */ + public ObservableList getAllNestedEvents() { + return nestedEvents; } private static class DetailIntervalSelector extends IntervalSelector { @@ -279,7 +282,7 @@ public final class DetailsChart extends Control implements TimeLineChart { - testFilter.selectedProperty().addListener(observable -> chart.requestLayout()); + testFilter.selectedProperty().addListener(observable -> chart.requestLayout()); chart.getController().getQuickHideFilters().add(testFilter); return testFilter; }); 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 7ee68dcf72..972437e336 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/EventClusterNode.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/EventClusterNode.java @@ -166,15 +166,16 @@ final public class EventClusterNode extends MultiEventNodeBase newSubStripes = get(); //clear the existing subnodes - List oldSubStripes = subNodes.stream().flatMap(new StripeFlattener()).collect(Collectors.toList()); - getChartLane().getParentChart().getAllNestedEventStripes().removeAll(oldSubStripes); + List oldSubEvents = subNodes.stream().flatMap(new StripeFlattener()).collect(Collectors.toList()); + getChartLane().getParentChart().getAllNestedEvents().removeAll(oldSubEvents); subNodes.clear(); if (newSubStripes.isEmpty()) { getChildren().setAll(subNodePane, infoHBox); setDescriptionLOD(getEvent().getDescriptionLoD()); } else { - getChartLane().getParentChart().getAllNestedEventStripes().addAll(newSubStripes); subNodes.addAll(Lists.transform(newSubStripes, EventClusterNode.this::createChildNode)); + List newSubEvents = subNodes.stream().flatMap(new StripeFlattener()).collect(Collectors.toList()); + getChartLane().getParentChart().getAllNestedEvents().addAll(newSubEvents); getChildren().setAll(new VBox(infoHBox, subNodePane)); setDescriptionLOD(loadedDescriptionLoD); } @@ -195,7 +196,7 @@ final public class EventClusterNode extends MultiEventNodeBase createChildNode(EventStripe stripe) { if (stripe.getEventIDs().size() == 1) { - return new SingleEventNode(getChartLane(), getChartLane().getController().getEventsModel().getEventById(Iterables.getOnlyElement(stripe.getEventIDs())), this); + return new SingleEventNode(getChartLane(), getChartLane().getController().getEventsModel().getEventById(Iterables.getOnlyElement(stripe.getEventIDs())).withParent(stripe), this); } else { return new EventStripeNode(getChartLane(), stripe, this); } 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 5da9be7912..740ba29cad 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/EventStripeNode.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/EventStripeNode.java @@ -98,7 +98,7 @@ final public class EventStripeNode extends MultiEventNodeBase createChildNode(EventCluster cluster) { if (cluster.getEventIDs().size() == 1) { - return new SingleEventNode(getChartLane(), getChartLane().getController().getEventsModel().getEventById(Iterables.getOnlyElement(cluster.getEventIDs())), this); + return new SingleEventNode(getChartLane(), getChartLane().getController().getEventsModel().getEventById(Iterables.getOnlyElement(cluster.getEventIDs())).withParent(cluster), this); } else { return new EventClusterNode(getChartLane(), cluster, this); } diff --git a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/BaseTypeTreeItem.java b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/BaseTypeTreeItem.java index 3483c237ab..c97d3596ac 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/BaseTypeTreeItem.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/BaseTypeTreeItem.java @@ -23,7 +23,6 @@ import java.util.Deque; import java.util.function.Supplier; import javafx.scene.control.TreeItem; import org.sleuthkit.autopsy.coreutils.ThreadConfined; -import org.sleuthkit.autopsy.timeline.datamodel.EventStripe; import org.sleuthkit.autopsy.timeline.datamodel.TimeLineEvent; import org.sleuthkit.autopsy.timeline.zooming.EventTypeZoomLevel; @@ -32,14 +31,14 @@ import org.sleuthkit.autopsy.timeline.zooming.EventTypeZoomLevel; */ class BaseTypeTreeItem extends EventTypeTreeItem { - BaseTypeTreeItem(EventStripe stripe, Comparator> comp) { + BaseTypeTreeItem(TimeLineEvent stripe, Comparator> comp) { super(stripe.getEventType().getBaseType(), comp); } @ThreadConfined(type = ThreadConfined.ThreadType.JFX) @Override - public void insert(Deque path) { - EventStripe peek = path.peek(); + public void insert(Deque path) { + TimeLineEvent peek = path.peek(); Supplier< EventsTreeItem> treeItemConstructor; String descriptionKey; /* @@ -51,7 +50,7 @@ class BaseTypeTreeItem extends EventTypeTreeItem { treeItemConstructor = () -> configureNewTreeItem(new SubTypeTreeItem(peek, getComparator())); } else { descriptionKey = peek.getDescription(); - EventStripe stripe = path.removeFirst(); + TimeLineEvent stripe = path.removeFirst(); treeItemConstructor = () -> configureNewTreeItem(new EventDescriptionTreeItem(stripe, getComparator())); } @@ -64,9 +63,9 @@ class BaseTypeTreeItem extends EventTypeTreeItem { } @Override - void remove(Deque path) { + void remove(Deque path) { - EventStripe head = path.peek(); + TimeLineEvent head = path.peek(); EventsTreeItem descTreeItem; if (head.getEventType().getZoomLevel() == EventTypeZoomLevel.SUB_TYPE) { 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 c8aefe9062..1672b32cf7 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 @@ -40,14 +40,14 @@ class EventDescriptionTreeItem extends EventsTreeItem { */ private final Map childMap = new HashMap<>(); - EventDescriptionTreeItem(EventStripe stripe, Comparator> comp) { + EventDescriptionTreeItem(TimeLineEvent stripe, Comparator> comp) { super(comp); setValue(stripe); } @ThreadConfined(type = ThreadConfined.ThreadType.JFX) - public void insert(Deque path) { - EventStripe head = path.removeFirst(); + public void insert(Deque path) { + TimeLineEvent head = path.removeFirst(); String substringAfter = StringUtils.substringAfter(head.getDescription(), head.getParentStripe().map(EventStripe::getDescription).orElse("")); EventDescriptionTreeItem treeItem = childMap.computeIfAbsent(substringAfter, description -> configureNewTreeItem(new EventDescriptionTreeItem(head, getComparator())) @@ -59,16 +59,19 @@ class EventDescriptionTreeItem extends EventsTreeItem { } @Override - void remove(Deque path) { - EventStripe head = path.removeFirst(); + void remove(Deque path) { + TimeLineEvent head = path.removeFirst(); String substringAfter = StringUtils.substringAfter(head.getDescription(), head.getParentStripe().map(EventStripe::getDescription).orElse("")); EventDescriptionTreeItem descTreeItem = childMap.get(substringAfter); - if (path.isEmpty() == false) { - descTreeItem.remove(path); - } - if (descTreeItem.getChildren().isEmpty()) { - childMap.remove(head.getDescription()); - getChildren().remove(descTreeItem); + + if (descTreeItem != null) { + if (path.isEmpty() == false) { + descTreeItem.remove(path); + } + if (descTreeItem.getChildren().isEmpty()) { + childMap.remove(substringAfter); + getChildren().remove(descTreeItem); + } } } 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 2e56edc85d..285cd52cba 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 @@ -1,7 +1,20 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Autopsy Forensic Browser + * + * Copyright 2016 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ package org.sleuthkit.autopsy.timeline.ui.detailview.tree; @@ -13,7 +26,7 @@ import org.sleuthkit.autopsy.timeline.datamodel.TimeLineEvent; import org.sleuthkit.autopsy.timeline.datamodel.eventtype.EventType; /** - * + * EventTreeItem for event types */ abstract class EventTypeTreeItem extends EventsTreeItem { diff --git a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/EventsTree.java b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/EventsTree.java index 849d13e530..3c2ef88507 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/EventsTree.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/EventsTree.java @@ -86,7 +86,7 @@ final public class EventsTree extends BorderPane { public void setDetailViewPane(DetailViewPane detailViewPane) { this.detailViewPane = detailViewPane; - detailViewPane.getAllEventStripes().addListener((ListChangeListener.Change c) -> { + detailViewPane.getAllNestedEvents().addListener((ListChangeListener.Change c) -> { //on jfx thread while (c.next()) { c.getRemoved().forEach(getRoot()::remove); @@ -112,7 +112,7 @@ final public class EventsTree extends BorderPane { @ThreadConfined(type = ThreadConfined.ThreadType.JFX) private void setRoot() { RootItem root = new RootItem(TreeComparator.Type.reversed().thenComparing(sortByBox.getSelectionModel().getSelectedItem())); - detailViewPane.getAllEventStripes().forEach(root::insert); + detailViewPane.getAllNestedEvents().forEach(root::insert); eventsTree.setRoot(root); } diff --git a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/EventsTreeItem.java b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/EventsTreeItem.java index 76a20f6c02..bac1c79c1e 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/EventsTreeItem.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/EventsTreeItem.java @@ -1,7 +1,7 @@ /* * Autopsy Forensic Browser * - * Copyright 2014 Basis Technology Corp. + * Copyright 2014-16 Basis Technology Corp. * Contact: carrier sleuthkit org * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -21,7 +21,6 @@ package org.sleuthkit.autopsy.timeline.ui.detailview.tree; import java.util.Comparator; import java.util.Deque; import javafx.scene.control.TreeItem; -import org.sleuthkit.autopsy.timeline.datamodel.EventStripe; import org.sleuthkit.autopsy.timeline.datamodel.TimeLineEvent; import org.sleuthkit.autopsy.timeline.datamodel.eventtype.EventType; @@ -58,9 +57,9 @@ abstract class EventsTreeItem extends TreeItem { abstract EventType getEventType(); - abstract void remove(Deque path); + abstract void remove(Deque path); - abstract void insert(Deque path); + abstract void insert(Deque path); T configureNewTreeItem(T newTreeItem) { newTreeItem.setExpanded(true); 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 8ab30e4c4e..a8e87a513f 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 @@ -50,7 +50,7 @@ class RootItem extends EventsTreeItem { * @param stripe stripe to add */ @ThreadConfined(type = ThreadConfined.ThreadType.JFX) - public void insert(EventStripe stripe) { + public void insert(TimeLineEvent stripe) { BaseTypeTreeItem treeItem = childMap.computeIfAbsent(stripe.getEventType().getBaseType(), baseType -> configureNewTreeItem(new BaseTypeTreeItem(stripe, getComparator())) @@ -58,7 +58,7 @@ class RootItem extends EventsTreeItem { treeItem.insert(getTreePath(stripe)); } - void remove(EventStripe stripe) { + void remove(TimeLineEvent stripe) { BaseTypeTreeItem typeTreeItem = childMap.get(stripe.getEventType().getBaseType()); if (typeTreeItem != null) { typeTreeItem.remove(getTreePath(stripe)); @@ -70,8 +70,8 @@ class RootItem extends EventsTreeItem { } } - static Deque< EventStripe> getTreePath(EventStripe event) { - Deque path = new ArrayDeque<>(); + static Deque< TimeLineEvent> getTreePath(TimeLineEvent event) { + Deque path = new ArrayDeque<>(); path.addFirst(event); Optional parentOptional = event.getParentStripe(); while (parentOptional.isPresent()) { @@ -110,12 +110,12 @@ class RootItem extends EventsTreeItem { } @Override - void remove(Deque path) { + void remove(Deque path) { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } @Override - void insert(Deque path) { + void insert(Deque path) { throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. } diff --git a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/SubTypeTreeItem.java b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/SubTypeTreeItem.java index 8dd586480e..1137148ea9 100644 --- a/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/SubTypeTreeItem.java +++ b/Core/src/org/sleuthkit/autopsy/timeline/ui/detailview/tree/SubTypeTreeItem.java @@ -1,7 +1,20 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. + * Autopsy Forensic Browser + * + * Copyright 2013-16 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ package org.sleuthkit.autopsy.timeline.ui.detailview.tree; @@ -9,18 +22,20 @@ import java.util.Comparator; import java.util.Deque; import javafx.scene.control.TreeItem; import org.sleuthkit.autopsy.coreutils.ThreadConfined; -import org.sleuthkit.autopsy.timeline.datamodel.EventStripe; import org.sleuthkit.autopsy.timeline.datamodel.TimeLineEvent; +/** + * EventTreeItem for sub event types + */ public class SubTypeTreeItem extends EventTypeTreeItem { - SubTypeTreeItem(EventStripe stripe, Comparator> comp) { + SubTypeTreeItem(TimeLineEvent stripe, Comparator> comp) { super(stripe.getEventType(), comp); } @ThreadConfined(type = ThreadConfined.ThreadType.JFX) - public void insert(Deque path) { - EventStripe head = path.removeFirst(); + public void insert(Deque path) { + TimeLineEvent head = path.removeFirst(); EventDescriptionTreeItem treeItem = childMap.computeIfAbsent(head.getDescription(), description -> configureNewTreeItem(new EventDescriptionTreeItem(head, getComparator())) ); @@ -31,8 +46,8 @@ public class SubTypeTreeItem extends EventTypeTreeItem } @Override - void remove(Deque path) { - EventStripe head = path.removeFirst(); + void remove(Deque path) { + TimeLineEvent head = path.removeFirst(); EventsTreeItem descTreeItem = childMap.get(head.getDescription()); if (descTreeItem != null) { if (path.isEmpty() == false) {