Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. package com.dmo.util.ui;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. import java.util.HashSet;
  5. import java.util.List;
  6. import javax.portlet.ActionRequest;
  7. import javax.portlet.ActionResponse;
  8. import javax.portlet.EventRequest;
  9. import javax.portlet.EventResponse;
  10. import javax.portlet.PortletMode;
  11. import javax.portlet.PortletRequest;
  12. import javax.portlet.PortletSession;
  13. import javax.portlet.RenderRequest;
  14. import javax.portlet.RenderResponse;
  15. import javax.portlet.ResourceRequest;
  16. import javax.portlet.ResourceResponse;
  17. import javax.servlet.annotation.WebServlet;
  18. import com.liferay.portal.kernel.exception.PortalException;
  19. import com.liferay.portal.kernel.exception.SystemException;
  20. import com.liferay.portal.kernel.util.WebKeys;
  21. import com.liferay.portal.model.Organization;
  22. import com.liferay.portal.model.User;
  23. import com.liferay.portal.service.OrganizationLocalServiceUtil;
  24. import com.liferay.portal.service.UserLocalServiceUtil;
  25. import com.liferay.portal.theme.ThemeDisplay;
  26. import com.liferay.portal.util.PortalUtil;
  27. import com.vaadin.annotations.Theme;
  28. import com.vaadin.annotations.VaadinServletConfiguration;
  29. import com.vaadin.data.util.HierarchicalContainer;
  30. import com.vaadin.event.ItemClickEvent;
  31. import com.vaadin.server.VaadinPortletSession;
  32. import com.vaadin.server.VaadinPortletSession.PortletListener;
  33. import com.vaadin.server.VaadinRequest;
  34. import com.vaadin.server.VaadinServlet;
  35. import com.vaadin.server.VaadinSession;
  36. import com.vaadin.ui.AbstractSelect.ItemCaptionMode;
  37. import com.vaadin.ui.Notification;
  38. import com.vaadin.ui.Notification.Type;
  39. import com.vaadin.ui.Tree;
  40. import com.vaadin.ui.UI;
  41. import com.vaadin.ui.VerticalLayout;
  42. @SuppressWarnings({
  43. "serial", "deprecation"
  44. })
  45. @Theme("dmoprojectview")
  46. public class DmoOrgTreeUI extends UI implements PortletListener {
  47. private PortletMode previousMode = null;
  48. private PortletRequest portletRequest;
  49. private PortletSession portletSession;
  50. private User user;
  51. private ThemeDisplay themeDisplay;
  52. private VerticalLayout viewContent = new VerticalLayout();
  53. private Tree tree = new Tree("Organization Tree");
  54. private HashSet<Long> checked = new HashSet<Long>();
  55. @WebServlet(value = "/*", asyncSupported = true)
  56. @VaadinServletConfiguration(productionMode = false, ui = DmoOrgTreeUI.class)
  57. public static class Servlet extends VaadinServlet {
  58. }
  59. @Override
  60. protected void init(VaadinRequest request) {
  61. viewContent = new VerticalLayout();
  62. viewContent.setMargin(true);
  63. setContent(viewContent);
  64. if (VaadinSession.getCurrent() instanceof VaadinPortletSession) {
  65. final VaadinPortletSession portletsession = (VaadinPortletSession) VaadinSession.getCurrent();
  66. portletsession.addPortletListener(this);
  67. try {
  68. setPortletRequestUI((PortletRequest) request);
  69. setPortletSessionUI(portletsession.getPortletSession());
  70. user = UserLocalServiceUtil.getUser(PortalUtil.getUser((PortletRequest) request).getUserId());
  71. setThemeDisplayUI((ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY));
  72. //System.out.println("DEBUG=>" + this.getClass() + "\n ==>themeDisplay getLayout=" + themeDisplay.getLayout().toString());
  73. doView();
  74. }
  75. catch (PortalException e) {
  76. e.printStackTrace();
  77. }
  78. catch (com.liferay.portal.kernel.exception.SystemException e) {
  79. e.printStackTrace();
  80. }
  81. }
  82. else {
  83. Notification.show("Not initialized in a Portal!", Notification.Type.ERROR_MESSAGE);
  84. }
  85. }
  86. @Override
  87. public void handleRenderRequest(RenderRequest request, RenderResponse response, UI root) {
  88. PortletMode portletMode = request.getPortletMode();
  89. try {
  90. setPortletRequestUI((PortletRequest) request);
  91. setPortletSessionUI(request.getPortletSession());
  92. setThemeDisplayUI((ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY));
  93. user = UserLocalServiceUtil.getUser(PortalUtil.getUser((PortletRequest) request).getUserId());
  94. if (request.getPortletMode() == PortletMode.VIEW) {
  95. doView();
  96. }
  97. }
  98. catch (PortalException e) {
  99. Notification.show(e.getMessage(), Type.ERROR_MESSAGE);
  100. }
  101. catch (com.liferay.portal.kernel.exception.SystemException e) {
  102. Notification.show(e.getMessage(), Type.ERROR_MESSAGE);
  103. }
  104. setPreviousModeUI(portletMode);
  105. }
  106. @Override
  107. public void handleActionRequest(ActionRequest request, ActionResponse response, UI root) {
  108. }
  109. @Override
  110. public void handleEventRequest(EventRequest request, EventResponse response, UI root) {
  111. }
  112. @Override
  113. public void handleResourceRequest(ResourceRequest request, ResourceResponse response, UI root) {
  114. this.setThemeDisplayUI((ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY));
  115. setPortletRequestUI((PortletRequest) request);
  116. setPortletSessionUI(request.getPortletSession());
  117. setThemeDisplayUI((ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY));
  118. try {
  119. user = UserLocalServiceUtil.getUser(PortalUtil.getUser((PortletRequest) request).getUserId());
  120. }
  121. catch (PortalException e) {
  122. Notification.show(e.getMessage(), Type.ERROR_MESSAGE);
  123. }
  124. catch (com.liferay.portal.kernel.exception.SystemException e) {
  125. Notification.show(e.getMessage(), Type.ERROR_MESSAGE);
  126. }
  127. }
  128. public void doView() {
  129. try {
  130. buildMainLayout();
  131. }
  132. catch (SystemException e) {
  133. Notification.show("System error occurred. Contact administrator.", Type.WARNING_MESSAGE);
  134. }
  135. catch (PortalException e) {
  136. Notification.show("System error occurred. Contact administrator.", Type.WARNING_MESSAGE);
  137. }
  138. catch (Exception e) {
  139. Notification.show("System error occurred. Contact administrator.", Type.WARNING_MESSAGE);
  140. }
  141. }
  142. private void buildMainLayout()
  143. throws SystemException, PortalException {
  144. if (viewContent.getComponentCount() > 0) {
  145. viewContent.removeAllComponents();
  146. }
  147. viewContent.setMargin(true);
  148. viewContent.addStyleName("view");
  149. List<Organization> orgList = new ArrayList<Organization>();
  150. orgList = OrganizationLocalServiceUtil.getUserOrganizations(user.getUserId());
  151. final HierarchicalContainer container = createTreeContent(orgList);
  152. tree = new Tree("My Organizations", container);
  153. tree.addStyleName("checkboxed");
  154. tree.setSelectable(false);
  155. tree.setItemCaptionMode(ItemCaptionMode.PROPERTY);
  156. tree.setItemCaptionPropertyId("name");
  157. tree.addItemClickListener(new ItemClickEvent.ItemClickListener() {
  158. public void itemClick(ItemClickEvent event) {
  159. if (event.getItemId().getClass() == Long.class) {
  160. long itemId = (Long) event.getItemId();
  161. if (checked.contains(itemId)) {
  162. checkboxChildren(container, itemId, false);
  163. }
  164. else {
  165. checkboxChildren(container, itemId, true);
  166. tree.expandItemsRecursively(itemId);
  167. }
  168. }
  169. tree.markAsDirty();
  170. }
  171. });
  172. Tree.ItemStyleGenerator itemStyleGenerator = new Tree.ItemStyleGenerator() {
  173. @Override
  174. public String getStyle(Tree source, Object itemId) {
  175. if (checked.contains(itemId))
  176. return "checked";
  177. else
  178. return "unchecked";
  179. }
  180. };
  181. tree.setItemStyleGenerator(itemStyleGenerator);
  182. viewContent.addComponent(tree);
  183. viewContent.setVisible(true);
  184. setContent(viewContent);
  185. }
  186. public void checkboxChildren(HierarchicalContainer hc, long itemId, boolean bAdd) {
  187. try {
  188. if (bAdd) {
  189. checked.add(itemId);
  190. }
  191. else {
  192. checked.remove(itemId);
  193. }
  194. if (hc.hasChildren(itemId)) {
  195. Collection<?> children = hc.getChildren(itemId);
  196. for (Object o : children) {
  197. if (o.getClass() == Long.class) {
  198. itemId = (Long) o;
  199. checkboxChildren(hc, itemId, bAdd);
  200. }
  201. }
  202. }
  203. }
  204. catch (Exception e) {
  205. Notification.show("Unable to build Organization tree. Contact Administrator.", Type.ERROR_MESSAGE);
  206. }
  207. }
  208. public static HierarchicalContainer createTreeContent(List<Organization> oTrees)
  209. throws SystemException, PortalException {
  210. HierarchicalContainer container = new HierarchicalContainer();
  211. container.addContainerProperty("name", String.class, "");
  212. new Object() {
  213. @SuppressWarnings("unchecked")
  214. public void put(List<Organization> data, HierarchicalContainer container)
  215. throws SystemException, PortalException {
  216. for (Organization o : data) {
  217. long orgId = o.getOrganizationId();
  218. if (!container.containsId(orgId)) {
  219. container.addItem(orgId);
  220. container.getItem(orgId).getItemProperty("name").setValue(o.getName());
  221. if (!o.hasSuborganizations()) {
  222. container.setChildrenAllowed(orgId, false);
  223. }
  224. else {
  225. container.setChildrenAllowed(orgId, true);
  226. }
  227. if (o.isRoot()) {
  228. container.setParent(orgId, null);
  229. }
  230. else {
  231. if (!container.containsId(o.getParentOrganizationId())) {
  232. List<Organization> sub = new ArrayList<Organization>();
  233. sub.add(o.getParentOrganization());
  234. put(sub, container);
  235. }
  236. container.setParent(orgId, (Object) o.getParentOrganizationId());
  237. }
  238. }
  239. }
  240. }
  241. }.put(oTrees, container);
  242. return container;
  243. }
  244. public PortletRequest getPortletRequestUI() {
  245. return portletRequest;
  246. }
  247. public void setPortletRequestUI(PortletRequest portletRequest) {
  248. this.portletRequest = portletRequest;
  249. }
  250. public PortletSession getPortletSessionUI() {
  251. return portletSession;
  252. }
  253. public void setPortletSessionUI(PortletSession portletSession) {
  254. this.portletSession = portletSession;
  255. }
  256. public ThemeDisplay getThemeDisplayUI() {
  257. return themeDisplay;
  258. }
  259. public void setThemeDisplayUI(ThemeDisplay themeDisplay) {
  260. this.themeDisplay = themeDisplay;
  261. }
  262. public PortletMode getPreviousModeUI() {
  263. return previousMode;
  264. }
  265. public void setPreviousModeUI(PortletMode previousMode) {
  266. this.previousMode = previousMode;
  267. }
  268. }