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.

TreeGridBigDetailsManager.java 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package com.vaadin.tests.components.treegrid;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import com.vaadin.annotations.Theme;
  5. import com.vaadin.data.TreeData;
  6. import com.vaadin.data.provider.TreeDataProvider;
  7. import com.vaadin.server.VaadinRequest;
  8. import com.vaadin.tests.components.AbstractTestUI;
  9. import com.vaadin.ui.Button;
  10. import com.vaadin.ui.HorizontalLayout;
  11. import com.vaadin.ui.Label;
  12. import com.vaadin.ui.TreeGrid;
  13. @Theme("valo")
  14. public class TreeGridBigDetailsManager extends AbstractTestUI {
  15. private TreeGrid<String> treeGrid;
  16. private TreeDataProvider<String> treeDataProvider;
  17. private List<String> items = new ArrayList<String>();
  18. private void initializeDataProvider() {
  19. TreeData<String> data = new TreeData<>();
  20. for (int i = 0; i < 100; i++) {
  21. String root = "Root " + i;
  22. items.add(root);
  23. data.addItem(null, root);
  24. for (int j = 0; j < 10; j++) {
  25. String branch = "Branch " + i + "/" + j;
  26. items.add(branch);
  27. data.addItem(root, branch);
  28. for (int k = 0; k < 3; k++) {
  29. String leaf = "Leaf " + i + "/" + j + "/" + k;
  30. items.add(leaf);
  31. data.addItem(branch, leaf);
  32. }
  33. }
  34. }
  35. treeDataProvider = new TreeDataProvider<>(data);
  36. }
  37. @Override
  38. protected void setup(VaadinRequest request) {
  39. initializeDataProvider();
  40. treeGrid = new TreeGrid<>();
  41. treeGrid.setDataProvider(treeDataProvider);
  42. treeGrid.setSizeFull();
  43. treeGrid.addColumn(String::toString).setCaption("String")
  44. .setId("string");
  45. treeGrid.addColumn((i) -> "--").setCaption("Nothing");
  46. treeGrid.setHierarchyColumn("string");
  47. treeGrid.setDetailsGenerator(
  48. row -> new Label("details for " + row.toString()));
  49. treeGrid.addItemClickListener(event -> {
  50. treeGrid.setDetailsVisible(event.getItem(),
  51. !treeGrid.isDetailsVisible(event.getItem()));
  52. });
  53. Button showDetails = new Button("Show all details", event -> {
  54. for (String id : items) {
  55. treeGrid.setDetailsVisible(id, true);
  56. }
  57. });
  58. showDetails.setId("showDetails");
  59. Button hideDetails = new Button("Hide all details", event -> {
  60. for (String id : items) {
  61. treeGrid.setDetailsVisible(id, false);
  62. }
  63. });
  64. hideDetails.setId("hideDetails");
  65. Button expandAll = new Button("Expand all", event -> {
  66. treeGrid.expand(items);
  67. });
  68. expandAll.setId("expandAll");
  69. Button collapseAll = new Button("Collapse all", event -> {
  70. treeGrid.collapse(items);
  71. });
  72. collapseAll.setId("collapseAll");
  73. Button scrollTo55 = new Button("Scroll to 55",
  74. event -> treeGrid.scrollTo(55));
  75. scrollTo55.setId("scrollTo55");
  76. scrollTo55.setVisible(false);
  77. Button addGrid = new Button("Add grid", event -> {
  78. addComponent(treeGrid);
  79. getLayout().setExpandRatio(treeGrid, 2);
  80. scrollTo55.setVisible(true);
  81. });
  82. addGrid.setId("addGrid");
  83. addComponents(
  84. new HorizontalLayout(showDetails, hideDetails, expandAll,
  85. collapseAll),
  86. new HorizontalLayout(addGrid, scrollTo55));
  87. getLayout().getParent().setHeight("100%");
  88. getLayout().setHeight("100%");
  89. treeGrid.setHeight("100%");
  90. setHeight("100%");
  91. }
  92. @Override
  93. protected String getTestDescription() {
  94. return "Expanding and collapsing with and without open details rows shouldn't cause exceptions. "
  95. + "Details row should be reopened upon expanding if it was open before collapsing.";
  96. }
  97. @Override
  98. protected Integer getTicketNumber() {
  99. return 11288;
  100. }
  101. }