public class ListEventBuilder<E> {

    public ListEventBuilder(ObservableList<E> source);

    public AddReceipt elementAdded(int index, E newValue);

    public RemoveReceipt elementRemoved(int index, E oldValue);

    public void elementReplaced(int index, E oldValue, E newValue);

    public ListEvent create();

    public interface AddReceipt {
        void setMovedFrom(RemoveReceipt removeReceipt);
    }

    public interface RemoveReceipt {
        void setMovedTo(AddReceipt addReceipt);
    }
}

