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.

ComboBoxPageLengthZeroRefreshItemAfterDataProviderUpdate.java 4.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package com.vaadin.tests.components.combobox;
  2. import java.util.ArrayList;
  3. import java.util.Objects;
  4. import com.vaadin.annotations.Widgetset;
  5. import com.vaadin.data.provider.ListDataProvider;
  6. import com.vaadin.server.VaadinRequest;
  7. import com.vaadin.tests.components.AbstractTestUI;
  8. import com.vaadin.ui.Button;
  9. import com.vaadin.ui.ComboBox;
  10. import com.vaadin.ui.HorizontalLayout;
  11. import com.vaadin.ui.VerticalLayout;
  12. @Widgetset("com.vaadin.DefaultWidgetSet")
  13. public class ComboBoxPageLengthZeroRefreshItemAfterDataProviderUpdate
  14. extends AbstractTestUI {
  15. private static final class Bean {
  16. @Override
  17. public boolean equals(Object o) {
  18. if (this == o)
  19. return true;
  20. if (o == null || getClass() != o.getClass())
  21. return false;
  22. Bean bean = (Bean) o;
  23. return Objects.equals(name, bean.name);
  24. }
  25. @Override
  26. public int hashCode() {
  27. return Objects.hash(name);
  28. }
  29. private String name;
  30. public Bean(String name) {
  31. setName(name);
  32. }
  33. public String getName() {
  34. return name;
  35. }
  36. public void setName(String name) {
  37. this.name = name;
  38. }
  39. }
  40. private ArrayList<Bean> list = new ArrayList<>();
  41. private ArrayList<Bean> list2 = new ArrayList<>();
  42. private int counter = 0;
  43. @Override
  44. protected void setup(VaadinRequest request) {
  45. HorizontalLayout root = new HorizontalLayout();
  46. root.setSizeFull();
  47. VerticalLayout leftLayout = new VerticalLayout();
  48. VerticalLayout rightLayout = new VerticalLayout();
  49. root.addComponent(leftLayout);
  50. root.addComponent(rightLayout);
  51. addComponent(root);
  52. final ComboBox<Bean> comboBoxPageLengthZero = new ComboBox<>();
  53. comboBoxPageLengthZero.setId("combo-0");
  54. comboBoxPageLengthZero.setPageLength(0);
  55. final ComboBox<Bean> comboBoxRegular = new ComboBox<>();
  56. comboBoxRegular.setId("combo-n");
  57. comboBoxPageLengthZero.setItemCaptionGenerator(bean -> bean.getName());
  58. comboBoxRegular.setItemCaptionGenerator(bean -> bean.getName());
  59. ListDataProvider<Bean> dataProvider = new ListDataProvider<>(list);
  60. ListDataProvider<Bean> dataProvider2 = new ListDataProvider<>(list2);
  61. comboBoxPageLengthZero.setDataProvider(dataProvider);
  62. comboBoxRegular.setDataProvider(dataProvider2);
  63. createComponents(leftLayout, comboBoxPageLengthZero, dataProvider,
  64. true);
  65. createComponents(rightLayout, comboBoxRegular, dataProvider2, false);
  66. }
  67. private void createComponents(VerticalLayout layout,
  68. ComboBox<Bean> comboBox, ListDataProvider<Bean> dataProvider,
  69. boolean pageLengthZero) {
  70. Button updateValues = new Button(
  71. "1. Refresh backing list and dataprovider, select first item",
  72. e -> {
  73. Bean selected = null;
  74. if (pageLengthZero) {
  75. list.clear();
  76. list.add(new Bean("foo" + (++counter)));
  77. list.add(new Bean("foo" + (++counter)));
  78. selected = list.get(0);
  79. } else {
  80. list2.clear();
  81. list2.add(new Bean("bar" + (++counter)));
  82. list2.add(new Bean("bar" + (++counter)));
  83. selected = list2.get(0);
  84. }
  85. dataProvider.refreshAll();
  86. comboBox.setValue(selected);
  87. });
  88. updateValues.setId(pageLengthZero ? "update-0" : "update-n");
  89. Button refresh = new Button(
  90. "2. Update item returned by combobox's getValue and call refreshItem on data provider",
  91. e -> {
  92. Bean currentValue = comboBox.getValue();
  93. currentValue.setName(currentValue.getName() + "(updated)");
  94. dataProvider.refreshItem(currentValue);
  95. });
  96. refresh.setId(pageLengthZero ? "refresh-0" : "refresh-n");
  97. layout.addComponents(updateValues, refresh, comboBox);
  98. }
  99. }