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.

TreeGridChangingHierarchy.java 3.4KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package com.vaadin.tests.components.treegrid;
  2. import java.util.stream.Stream;
  3. import com.vaadin.data.TreeData;
  4. import com.vaadin.data.ValueProvider;
  5. import com.vaadin.data.provider.HierarchicalQuery;
  6. import com.vaadin.data.provider.TreeDataProvider;
  7. import com.vaadin.server.SerializablePredicate;
  8. import com.vaadin.server.VaadinRequest;
  9. import com.vaadin.tests.components.AbstractTestUI;
  10. import com.vaadin.ui.Button;
  11. import com.vaadin.ui.TreeGrid;
  12. public class TreeGridChangingHierarchy extends AbstractTestUI {
  13. private static class TestDataProvider extends TreeDataProvider<String> {
  14. private TreeData<String> treeData;
  15. public TestDataProvider(TreeData<String> treeData) {
  16. super(treeData);
  17. this.treeData = treeData;
  18. }
  19. @Override
  20. public boolean hasChildren(String item) {
  21. if (!treeData.contains(item)) {
  22. return false;
  23. }
  24. return super.hasChildren(item);
  25. }
  26. @Override
  27. public Stream<String> fetchChildren(
  28. HierarchicalQuery<String, SerializablePredicate<String>> query) {
  29. if (!treeData.contains(query.getParent())) {
  30. return Stream.empty();
  31. }
  32. return super.fetchChildren(query);
  33. }
  34. }
  35. @Override
  36. protected void setup(VaadinRequest request) {
  37. TreeData<String> data = new TreeData<>();
  38. data.addItems(null, "a", "b", "c").addItem("b", "b/a");
  39. TreeGrid<String> grid = new TreeGrid<>();
  40. grid.setDataProvider(new TestDataProvider(data));
  41. grid.addColumn(ValueProvider.identity());
  42. Button btn = new Button("add items to a and refresh");
  43. btn.addClickListener(event -> {
  44. data.addItems("a", "a/a", "a/b");
  45. grid.getDataProvider().refreshItem("a");
  46. });
  47. Button btn2 = new Button("add items to a/a and refresh");
  48. btn2.addClickListener(event -> {
  49. data.addItems("a/a", "a/a/a", "a/a/c").addItem("a/a/a", "a/a/a/a");
  50. grid.getDataProvider().refreshItem("a/a");
  51. });
  52. Button btn3 = new Button("remove a/a");
  53. btn3.addClickListener(event -> {
  54. data.removeItem("a/a");
  55. // Inform item removal to DataProvider
  56. grid.getDataProvider().refreshAll();
  57. });
  58. Button btn4 = new Button("remove children of a/a");
  59. btn4.addClickListener(event -> {
  60. data.removeItem("a/a/a");
  61. data.removeItem("a/a/c");
  62. // Inform item removal to DataProvider
  63. grid.getDataProvider().refreshAll();
  64. });
  65. Button btn5 = new Button("remove a");
  66. btn5.addClickListener(event -> {
  67. data.removeItem("a");
  68. // Inform item removal to DataProvider
  69. grid.getDataProvider().refreshAll();
  70. });
  71. Button btn6 = new Button("remove children of a");
  72. btn6.addClickListener(event -> {
  73. data.removeItem("a/a");
  74. data.removeItem("a/b");
  75. // Inform item removal to DataProvider
  76. grid.getDataProvider().refreshAll();
  77. });
  78. Button btn7 = new Button("remove children of a/a/a");
  79. btn7.addClickListener(event -> {
  80. data.removeItem("a/a/a/a");
  81. // Inform item removal to DataProvider
  82. grid.getDataProvider().refreshAll();
  83. });
  84. addComponents(grid, btn, btn2, btn3, btn4, btn5, btn6, btn7);
  85. }
  86. }