19 package org.sleuthkit.autopsy.coreutils;
21 import java.util.Deque;
22 import java.util.Objects;
23 import javafx.beans.property.Property;
24 import javafx.beans.property.ReadOnlyBooleanProperty;
25 import javafx.beans.property.ReadOnlyBooleanWrapper;
26 import javafx.beans.property.ReadOnlyObjectProperty;
27 import javafx.beans.property.ReadOnlyObjectWrapper;
28 import javafx.beans.property.SimpleListProperty;
29 import javafx.collections.FXCollections;
30 import javax.annotation.concurrent.GuardedBy;
31 import javax.annotation.concurrent.ThreadSafe;
47 private final ObservableStack<T>
historyStack = new ObservableStack<>();
50 private final ObservableStack<T>
forwardStack = new ObservableStack<>();
53 private final ReadOnlyObjectWrapper<T>
currentState = new ReadOnlyObjectWrapper<>();
56 private final ReadOnlyBooleanWrapper
canAdvance = new ReadOnlyBooleanWrapper();
59 private final ReadOnlyBooleanWrapper
canRetreat = new ReadOnlyBooleanWrapper();
95 synchronized public void reset(T newState) {
110 if (peek != null && peek.equals(
currentState.get()) ==
false) {
127 if (pop != null && pop.equals(
currentState.get()) ==
false) {
131 }
else if (pop != null && pop.equals(
currentState.get())) {
146 synchronized public void advance(T newState)
throws IllegalArgumentException {
147 if (newState != null && Objects.equals(
currentState.get(), newState) ==
false) {
176 super(FXCollections.<T>synchronizedObservableList(FXCollections.<T>observableArrayList()));
180 synchronized (
this) {
186 synchronized (
this) {
196 synchronized (
this) {
final ObservableStack< T > forwardStack
final ObservableStack< T > historyStack
synchronized boolean canRetreat()
synchronized void reset(T newState)
synchronized T getCurrentState()
synchronized boolean canAdvance()
synchronized ReadOnlyObjectProperty< T > currentState()
synchronized ReadOnlyBooleanProperty getCanRetreat()
synchronized void advance(T newState)
synchronized ReadOnlyBooleanProperty getCanAdvance()
synchronized void clear()