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.

Vaadin7HierarchicalContainerAndTreeComponentExampleWithLiferayOrganizationService.asciidoc 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. ---
  2. title: Vaadin 7 Hierarchical Container And Tree Component Example With Liferay Organization Service
  3. order: 26
  4. layout: page
  5. ---
  6. [[vaadin-7-hierarchical-container-and-treecomponent-example-with-liferay-organizationservice]]
  7. = Vaadin 7 hierarchical container and TreeComponent example with Liferay OrganizationService
  8. I recently needed a portlet to display the Organizations/Locations a
  9. user belongs to in a Hierarchical Tree.  I used Vaadin's tree and
  10. hierarchical container components along with information from Vaadin's
  11. book of examples to create the code below (http://demo.vaadin.com/book-examples-vaadin7/book#component.tree.itemstylegenerator).
  12. See <<img/DmoOrgTreeUI.java,DmoOrgTreeUI.java>> for full source code.
  13. [source,java]
  14. ....
  15. private void buildMainLayout() throws SystemException, PortalException {
  16. if (viewContent.getComponentCount() > 0) {
  17. viewContent.removeAllComponents();
  18. }
  19. viewContent.setMargin(true);
  20. viewContent.addStyleName("view");
  21. List orgList = new ArrayList();
  22. orgList = OrganizationLocalServiceUtil.getUserOrganizations(user.getUserId());
  23. final HierarchicalContainer container = createTreeContent(orgList);
  24. tree = new Tree("My Organizations", container);
  25. tree.addStyleName("checkboxed");
  26. tree.setSelectable(false);
  27. tree.setItemCaptionMode(ItemCaptionMode.PROPERTY);
  28. tree.setItemCaptionPropertyId("name");
  29. tree.addItemClickListener(new ItemClickEvent.ItemClickListener() {
  30. public void itemClick(ItemClickEvent event) {
  31. if (event.getItemId().getClass() == Long.class) {
  32. long itemId = (Long) event.getItemId();
  33. if (checked.contains(itemId)) {
  34. checkboxChildren(container, itemId, false);
  35. }
  36. else {
  37. checkboxChildren(container, itemId, true);
  38. tree.expandItemsRecursively(itemId);
  39. }
  40. }
  41. tree.markAsDirty();
  42. }
  43. });
  44. Tree.ItemStyleGenerator itemStyleGenerator = new Tree.ItemStyleGenerator() {
  45. @Override
  46. public String getStyle(Tree source, Object itemId) {
  47. if (checked.contains(itemId))
  48. return "checked";
  49. else
  50. return "unchecked";
  51. }
  52. };
  53. tree.setItemStyleGenerator(itemStyleGenerator);
  54. viewContent.addComponent(tree);
  55. viewContent.setVisible(true);
  56. setContent(viewContent);
  57. }
  58. public void checkboxChildren(HierarchicalContainer hc, long itemId, boolean bAdd) {
  59. try {
  60. if (bAdd) {
  61. checked.add(itemId);
  62. }
  63. else {
  64. checked.remove(itemId);
  65. Object iParendId = hc.getParent(itemId);
  66. while (iParendId != null) {
  67. checked.remove(iParendId);
  68. iParendId = hc.getParent(iParendId);
  69. }
  70. }
  71. if (hc.hasChildren(itemId)) {
  72. Collection children = hc.getChildren(itemId);
  73. for (Object o : children) {
  74. if (o.getClass() == Long.class) {
  75. itemId = (Long) o;
  76. checkboxChildren(hc, itemId, bAdd);
  77. }
  78. }
  79. }
  80. }
  81. catch (Exception e) {
  82. Notification.show("Unable to build Organization tree. Contact Administrator.", Type.ERROR_MESSAGE);
  83. }
  84. }
  85. public static HierarchicalContainer createTreeContent(List oTrees)
  86. throws SystemException, PortalException {
  87. HierarchicalContainer container = new HierarchicalContainer();
  88. container.addContainerProperty("name", String.class, "");
  89. new Object() {
  90. @SuppressWarnings("unchecked")
  91. public void put(List data, HierarchicalContainer container)
  92. throws SystemException, PortalException {
  93. for (Organization o : data) {
  94. long orgId = o.getOrganizationId();
  95. if (!container.containsId(orgId)) {
  96. container.addItem(orgId);
  97. container.getItem(orgId).getItemProperty("name").setValue(o.getName());
  98. if (!o.hasSuborganizations()) {
  99. container.setChildrenAllowed(orgId, false);
  100. }
  101. else {
  102. container.setChildrenAllowed(orgId, true);
  103. }
  104. if (o.isRoot()) {
  105. container.setParent(orgId, null);
  106. }
  107. else {
  108. if (!container.containsId(o.getParentOrganizationId())) {
  109. List sub = new ArrayList();
  110. sub.add(o.getParentOrganization());
  111. put(sub, container);
  112. }
  113. container.setParent(orgId, (Object) o.getParentOrganizationId());
  114. }
  115. }
  116. }
  117. }
  118. }.put(oTrees, container);
  119. return container;
  120. }
  121. ....
  122. Below is the css used
  123. [source,scss]
  124. ....
  125. .v-tree-node-caption-disabled {
  126. color: black;
  127. font-style: italic;
  128. //border-style:solid;
  129. //border-width:1px;
  130. }
  131. .v-tree-checkboxed .v-tree-node-caption-unchecked div span {
  132. background: url("images/unchecked.png") no-repeat;
  133. padding-left: 24px;
  134. //border-style:solid;
  135. //border-width:1px;
  136. }
  137. .v-tree-checkboxed .v-tree-node-caption-checked div span {
  138. background: url("images/checked.png") no-repeat;
  139. padding-left: 24px;
  140. //border-style:solid;
  141. //border-width:1px;
  142. }
  143. ....