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.

DataProviderRefresh.java 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package com.vaadin.tests.data;
  2. import java.io.Serializable;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.Objects;
  6. import java.util.Random;
  7. import java.util.stream.Stream;
  8. import com.vaadin.data.provider.AbstractDataProvider;
  9. import com.vaadin.data.provider.Query;
  10. import com.vaadin.server.VaadinRequest;
  11. import com.vaadin.tests.components.AbstractTestUI;
  12. import com.vaadin.ui.Button;
  13. import com.vaadin.ui.Grid;
  14. public class DataProviderRefresh extends AbstractTestUI {
  15. public static class Bean implements Serializable {
  16. private String value;
  17. private final int id;
  18. public Bean(String value, int id) {
  19. this.value = value;
  20. this.id = id;
  21. }
  22. public String getValue() {
  23. return value;
  24. }
  25. public int getId() {
  26. return id;
  27. }
  28. public void setValue(String value) {
  29. this.value = value;
  30. }
  31. @Override
  32. public String toString() {
  33. return "{ " + value + ", " + id + " }";
  34. }
  35. }
  36. /**
  37. * A dummy data provider for testing item replacement and stale elements.
  38. */
  39. public class ReplaceListDataProvider
  40. extends AbstractDataProvider<Bean, Void> {
  41. private final List<Bean> backend;
  42. public ReplaceListDataProvider(List<Bean> items) {
  43. backend = items;
  44. }
  45. @Override
  46. public void refreshItem(Bean item) {
  47. if (replaceItem(item)) {
  48. super.refreshItem(item);
  49. }
  50. }
  51. private boolean replaceItem(Bean item) {
  52. for (int i = 0; i < backend.size(); ++i) {
  53. if (getId(backend.get(i)).equals(getId(item))) {
  54. if (backend.get(i).equals(item)) {
  55. return false;
  56. }
  57. backend.set(i, item);
  58. return true;
  59. }
  60. }
  61. return false;
  62. }
  63. @Override
  64. public boolean isInMemory() {
  65. return true;
  66. }
  67. @Override
  68. public int size(Query<Bean, Void> t) {
  69. return backend.size();
  70. }
  71. @Override
  72. public Stream<Bean> fetch(Query<Bean, Void> query) {
  73. return backend.stream().skip(query.getOffset())
  74. .limit(query.getLimit());
  75. }
  76. @Override
  77. public Object getId(Bean item) {
  78. return item.getId();
  79. }
  80. }
  81. @Override
  82. protected void setup(VaadinRequest request) {
  83. Grid<Bean> grid = new Grid<>();
  84. ArrayList<Bean> arrayList = new ArrayList<>();
  85. Bean foo = new Bean("Foo", 10);
  86. arrayList.add(foo);
  87. arrayList.add(new Bean("Baz", 11));
  88. ReplaceListDataProvider dataProvider = new ReplaceListDataProvider(
  89. arrayList);
  90. grid.setDataProvider(dataProvider);
  91. grid.addColumn(Object::toString).setCaption("toString");
  92. addComponent(grid);
  93. addComponent(new Button("Replace item",
  94. e -> dataProvider.refreshItem(new Bean("Bar", 10))));
  95. addComponent(new Button("Select old", e -> grid.select(foo)));
  96. }
  97. }