You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

LazyHierarchicalDataProvider.java 2.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package com.vaadin.tests.components.treegrid;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Optional;
  5. import java.util.stream.Stream;
  6. import com.vaadin.data.provider.AbstractBackEndHierarchicalDataProvider;
  7. import com.vaadin.data.provider.HierarchicalQuery;
  8. import com.vaadin.tests.data.bean.HierarchicalTestBean;
  9. public class LazyHierarchicalDataProvider extends
  10. AbstractBackEndHierarchicalDataProvider<HierarchicalTestBean, Void> {
  11. private final int nodesPerLevel;
  12. private final int depth;
  13. public LazyHierarchicalDataProvider(int nodesPerLevel, int depth) {
  14. this.nodesPerLevel = nodesPerLevel;
  15. this.depth = depth;
  16. }
  17. @Override
  18. public int getChildCount(
  19. HierarchicalQuery<HierarchicalTestBean, Void> query) {
  20. Optional<Integer> count = query.getParentOptional()
  21. .flatMap(parent -> Optional.of(Integer.valueOf(
  22. (internalHasChildren(parent) ? nodesPerLevel : 0))));
  23. return count.orElse(nodesPerLevel);
  24. }
  25. @Override
  26. public boolean hasChildren(HierarchicalTestBean item) {
  27. return internalHasChildren(item);
  28. }
  29. private boolean internalHasChildren(HierarchicalTestBean node) {
  30. return node.getDepth() < depth;
  31. }
  32. @Override
  33. protected Stream<HierarchicalTestBean> fetchChildrenFromBackEnd(
  34. HierarchicalQuery<HierarchicalTestBean, Void> query) {
  35. final int depth = query.getParentOptional().isPresent()
  36. ? query.getParent().getDepth() + 1
  37. : 0;
  38. final Optional<String> parentKey = query.getParentOptional()
  39. .flatMap(parent -> Optional.of(parent.getId()));
  40. List<HierarchicalTestBean> list = new ArrayList<>();
  41. int limit = Math.min(query.getLimit(), nodesPerLevel);
  42. for (int i = 0; i < limit; i++) {
  43. list.add(new HierarchicalTestBean(parentKey.orElse(null), depth,
  44. i + query.getOffset()));
  45. }
  46. return list.stream();
  47. }
  48. }