Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -259,7 +259,8 @@ public void refresh(T item, boolean refreshChildren) {

@Override
public Stream<T> fetchFromProvider(int offset, int limit) {
return fetchDataProviderChildren(null, Range.withLength(offset, limit));
return fetchDataProviderChildren(null, Range.withLength(offset, limit))
.stream();
}

@Override
Expand Down Expand Up @@ -516,8 +517,7 @@ && isExpanded(item)) {
private void preloadRange(Cache<T> cache, int start, int length) {
var range = Range.withLength(start, length)
.restrictTo(Range.withLength(0, cache.getSize()));
var items = fetchDataProviderChildren(cache.getParentItem(), range)
.toList();
var items = fetchDataProviderChildren(cache.getParentItem(), range);
cache.setItems(range.getStart(), items);
}

Expand Down Expand Up @@ -751,16 +751,24 @@ public HierarchicalQuery<T, Object> buildQuery(T parent, int offset,
}

@SuppressWarnings("unchecked")
private Stream<T> fetchDataProviderChildren(T parent, Range range) {
private List<T> fetchDataProviderChildren(T parent, Range range) {
var query = buildQuery(parent, range.getStart(), range.length());

return ((HierarchicalDataProvider<T, Object>) getDataProvider())
.fetchChildren(query).peek((item) -> {
if (item == null) {
throw new IllegalStateException(
"Data provider returned a null item. Null values are not supported");
}
});
var items = ((HierarchicalDataProvider<T, Object>) getDataProvider())
.fetchChildren(query).toList();
if (items.size() > range.length()) {
throw new IllegalStateException(
"""
Data provider returned more items than requested. Requested %d but got %d. \
Make sure that your data provider respects the offset and limit in HierarchicalQuery.
"""
.formatted(range.length(), items.size()));
}
if (items.contains(null)) {
throw new IllegalStateException(
"Data provider returned a null item. Null values are not supported");
}
return items;
}

@SuppressWarnings("unchecked")
Expand Down
Loading