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.

GridDataProviderRefresh.java 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package com.vaadin.tests.components.grid;
  2. import java.util.Arrays;
  3. import java.util.concurrent.atomic.AtomicReference;
  4. import java.util.stream.Stream;
  5. import com.vaadin.data.provider.AbstractBackEndDataProvider;
  6. import com.vaadin.data.provider.Query;
  7. import com.vaadin.server.VaadinRequest;
  8. import com.vaadin.ui.Button;
  9. import com.vaadin.ui.Grid;
  10. /**
  11. * Tests that Grid refresh doesn't get stuck when filtering doesn't match row
  12. * requests.
  13. *
  14. * @author Vaadin Ltd
  15. */
  16. public class GridDataProviderRefresh extends SimpleGridUI {
  17. private volatile Boolean filter = false;
  18. private Stream<AtomicReference<String>> fetchValue(Boolean filter) {
  19. if (filter) {
  20. return Arrays
  21. .asList("One", String.valueOf(System.currentTimeMillis()))
  22. .stream().map(s -> new AtomicReference<>(s));
  23. } else {
  24. return Stream.empty();
  25. }
  26. }
  27. @Override
  28. protected void setup(VaadinRequest request) {
  29. AbstractBackEndDataProvider<AtomicReference<String>, Object> dataProvider = new AbstractBackEndDataProvider<AtomicReference<String>, Object>() {
  30. @Override
  31. protected Stream<AtomicReference<String>> fetchFromBackEnd(
  32. Query<AtomicReference<String>, Object> query) {
  33. try {
  34. Thread.sleep(250);
  35. } catch (InterruptedException e) {
  36. e.printStackTrace();
  37. }
  38. return fetchValue(filter);
  39. }
  40. @Override
  41. protected int sizeInBackEnd(
  42. Query<AtomicReference<String>, Object> query) {
  43. return (int) fetchValue(filter).count();
  44. }
  45. };
  46. Grid<AtomicReference<String>> grid = new Grid<>();
  47. grid.setDataProvider(dataProvider);
  48. grid.addColumn(AtomicReference::get);
  49. addComponent(grid);
  50. Button button = new Button("Refresh");
  51. button.addClickListener(event1 -> {
  52. filter = new Boolean(!filter);
  53. dataProvider.refreshAll();
  54. });
  55. addComponent(button);
  56. }
  57. @Override
  58. protected String getTestDescription() {
  59. return "Grid refreshAll shouldn't get stuck when filtering doesn't match row requests "
  60. + "(randomly triggered when button is clicked fast enough "
  61. + "several times in a row, especially if using old and slow Windows)";
  62. }
  63. @Override
  64. protected Integer getTicketNumber() {
  65. return 10038;
  66. }
  67. }