PageRenderTime 55ms CodeModel.GetById 27ms RepoModel.GetById 0ms app.codeStats 0ms

/modules/apps/site-navigation/site-navigation-service/src/main/java/com/liferay/site/navigation/service/impl/SiteNavigationMenuItemLocalServiceImpl.java

http://github.com/liferay/liferay-portal
Java | 453 lines | 338 code | 97 blank | 18 comment | 22 complexity | 76866835177963da3adf219beb19c8f6 MD5 | raw file
Possible License(s): LGPL-2.0
  1. /**
  2. * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
  3. *
  4. * This library is free software; you can redistribute it and/or modify it under
  5. * the terms of the GNU Lesser General Public License as published by the Free
  6. * Software Foundation; either version 2.1 of the License, or (at your option)
  7. * any later version.
  8. *
  9. * This library is distributed in the hope that it will be useful, but WITHOUT
  10. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  11. * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
  12. * details.
  13. */
  14. package com.liferay.site.navigation.service.impl;
  15. import com.liferay.petra.sql.dsl.DSLQueryFactoryUtil;
  16. import com.liferay.portal.aop.AopService;
  17. import com.liferay.portal.kernel.dao.orm.QueryUtil;
  18. import com.liferay.portal.kernel.exception.PortalException;
  19. import com.liferay.portal.kernel.model.ModelHintsUtil;
  20. import com.liferay.portal.kernel.model.SystemEventConstants;
  21. import com.liferay.portal.kernel.model.User;
  22. import com.liferay.portal.kernel.search.Indexable;
  23. import com.liferay.portal.kernel.search.IndexableType;
  24. import com.liferay.portal.kernel.service.LayoutService;
  25. import com.liferay.portal.kernel.service.ServiceContext;
  26. import com.liferay.portal.kernel.service.UserLocalService;
  27. import com.liferay.portal.kernel.systemevent.SystemEvent;
  28. import com.liferay.portal.kernel.util.GetterUtil;
  29. import com.liferay.portal.kernel.util.UnicodeProperties;
  30. import com.liferay.portal.kernel.util.UnicodePropertiesBuilder;
  31. import com.liferay.portal.kernel.util.Validator;
  32. import com.liferay.site.navigation.exception.InvalidSiteNavigationMenuItemOrderException;
  33. import com.liferay.site.navigation.exception.InvalidSiteNavigationMenuItemTypeException;
  34. import com.liferay.site.navigation.exception.SiteNavigationMenuItemNameException;
  35. import com.liferay.site.navigation.model.SiteNavigationMenu;
  36. import com.liferay.site.navigation.model.SiteNavigationMenuItem;
  37. import com.liferay.site.navigation.model.SiteNavigationMenuItemTable;
  38. import com.liferay.site.navigation.service.base.SiteNavigationMenuItemLocalServiceBaseImpl;
  39. import com.liferay.site.navigation.service.persistence.SiteNavigationMenuPersistence;
  40. import com.liferay.site.navigation.type.SiteNavigationMenuItemType;
  41. import com.liferay.site.navigation.type.SiteNavigationMenuItemTypeRegistry;
  42. import com.liferay.site.navigation.util.comparator.SiteNavigationMenuItemOrderComparator;
  43. import java.util.Date;
  44. import java.util.List;
  45. import org.osgi.service.component.annotations.Component;
  46. import org.osgi.service.component.annotations.Reference;
  47. /**
  48. * @author Pavel Savinov
  49. */
  50. @Component(
  51. property = "model.class.name=com.liferay.site.navigation.model.SiteNavigationMenuItem",
  52. service = AopService.class
  53. )
  54. public class SiteNavigationMenuItemLocalServiceImpl
  55. extends SiteNavigationMenuItemLocalServiceBaseImpl {
  56. @Override
  57. public SiteNavigationMenuItem addSiteNavigationMenuItem(
  58. long userId, long groupId, long siteNavigationMenuId,
  59. long parentSiteNavigationMenuItemId, String type, int order,
  60. String typeSettings, ServiceContext serviceContext)
  61. throws PortalException {
  62. SiteNavigationMenuItemType siteNavigationMenuItemType =
  63. _siteNavigationMenuItemTypeRegistry.getSiteNavigationMenuItemType(
  64. type);
  65. if (siteNavigationMenuItemType == null) {
  66. throw new InvalidSiteNavigationMenuItemTypeException(type);
  67. }
  68. String name = siteNavigationMenuItemType.getName(typeSettings);
  69. validateName(name);
  70. User user = _userLocalService.getUser(userId);
  71. long siteNavigationMenuItemId = counterLocalService.increment();
  72. SiteNavigationMenuItem siteNavigationMenuItem =
  73. siteNavigationMenuItemPersistence.create(siteNavigationMenuItemId);
  74. siteNavigationMenuItem.setUuid(serviceContext.getUuid());
  75. siteNavigationMenuItem.setGroupId(groupId);
  76. siteNavigationMenuItem.setCompanyId(user.getCompanyId());
  77. siteNavigationMenuItem.setUserId(userId);
  78. siteNavigationMenuItem.setUserName(user.getFullName());
  79. siteNavigationMenuItem.setSiteNavigationMenuId(siteNavigationMenuId);
  80. siteNavigationMenuItem.setParentSiteNavigationMenuItemId(
  81. parentSiteNavigationMenuItemId);
  82. siteNavigationMenuItem.setName(name);
  83. siteNavigationMenuItem.setType(type);
  84. siteNavigationMenuItem.setTypeSettings(typeSettings);
  85. siteNavigationMenuItem.setOrder(order);
  86. return siteNavigationMenuItemPersistence.update(siteNavigationMenuItem);
  87. }
  88. @Override
  89. public SiteNavigationMenuItem addSiteNavigationMenuItem(
  90. long userId, long groupId, long siteNavigationMenuId,
  91. long parentSiteNavigationMenuItemId, String type,
  92. String typeSettings, ServiceContext serviceContext)
  93. throws PortalException {
  94. int siteNavigationMenuItemCount =
  95. siteNavigationMenuItemPersistence.countByS_P(
  96. siteNavigationMenuId, parentSiteNavigationMenuItemId);
  97. return addSiteNavigationMenuItem(
  98. userId, groupId, siteNavigationMenuId,
  99. parentSiteNavigationMenuItemId, type, siteNavigationMenuItemCount,
  100. typeSettings, serviceContext);
  101. }
  102. @Override
  103. public SiteNavigationMenuItem deleteSiteNavigationMenuItem(
  104. long siteNavigationMenuItemId)
  105. throws PortalException {
  106. SiteNavigationMenuItem siteNavigationMenuItem =
  107. getSiteNavigationMenuItem(siteNavigationMenuItemId);
  108. List<SiteNavigationMenuItem> siteNavigationMenuItems =
  109. getSiteNavigationMenuItems(
  110. siteNavigationMenuItem.getSiteNavigationMenuId(),
  111. siteNavigationMenuItemId);
  112. List<SiteNavigationMenuItem> siblingsSiteNavigationMenuItems =
  113. getSiteNavigationMenuItems(
  114. siteNavigationMenuItem.getSiteNavigationMenuId(),
  115. siteNavigationMenuItem.getParentSiteNavigationMenuItemId());
  116. for (SiteNavigationMenuItem siblingSiteNavigationMenuItem :
  117. siblingsSiteNavigationMenuItems) {
  118. if (siblingSiteNavigationMenuItem.getOrder() <=
  119. siteNavigationMenuItem.getOrder()) {
  120. continue;
  121. }
  122. siblingSiteNavigationMenuItem.setOrder(
  123. siteNavigationMenuItems.size() +
  124. siblingSiteNavigationMenuItem.getOrder() - 1);
  125. siteNavigationMenuItemPersistence.update(
  126. siblingSiteNavigationMenuItem);
  127. }
  128. for (int i = 0; i < siteNavigationMenuItems.size(); i++) {
  129. SiteNavigationMenuItem childSiteNavigationMenuItem =
  130. siteNavigationMenuItems.get(i);
  131. childSiteNavigationMenuItem.setParentSiteNavigationMenuItemId(
  132. siteNavigationMenuItem.getParentSiteNavigationMenuItemId());
  133. childSiteNavigationMenuItem.setOrder(
  134. siteNavigationMenuItem.getOrder() + i);
  135. siteNavigationMenuItemPersistence.update(
  136. childSiteNavigationMenuItem);
  137. }
  138. return siteNavigationMenuItemLocalService.deleteSiteNavigationMenuItem(
  139. siteNavigationMenuItem);
  140. }
  141. @Indexable(type = IndexableType.DELETE)
  142. @Override
  143. @SystemEvent(type = SystemEventConstants.TYPE_DELETE)
  144. public SiteNavigationMenuItem deleteSiteNavigationMenuItem(
  145. SiteNavigationMenuItem siteNavigationMenuItem) {
  146. return siteNavigationMenuItemPersistence.remove(siteNavigationMenuItem);
  147. }
  148. @Override
  149. public void deleteSiteNavigationMenuItems(long siteNavigationMenuId) {
  150. siteNavigationMenuItemPersistence.removeBySiteNavigationMenuId(
  151. siteNavigationMenuId);
  152. }
  153. @Override
  154. public void deleteSiteNavigationMenuItemsByGroupId(long groupId) {
  155. List<SiteNavigationMenu> siteNavigationMenus =
  156. _siteNavigationMenuPersistence.findByGroupId(groupId);
  157. for (SiteNavigationMenu siteNavigationMenu : siteNavigationMenus) {
  158. siteNavigationMenuItemPersistence.removeBySiteNavigationMenuId(
  159. siteNavigationMenu.getSiteNavigationMenuId());
  160. }
  161. }
  162. @Override
  163. public List<Long> getParentSiteNavigationMenuItemIds(
  164. long siteNavigationMenuId, String typeSettingsKeyword) {
  165. return siteNavigationMenuItemPersistence.dslQuery(
  166. DSLQueryFactoryUtil.select(
  167. SiteNavigationMenuItemTable.INSTANCE.
  168. parentSiteNavigationMenuItemId
  169. ).from(
  170. SiteNavigationMenuItemTable.INSTANCE
  171. ).where(
  172. SiteNavigationMenuItemTable.INSTANCE.siteNavigationMenuId.eq(
  173. siteNavigationMenuId
  174. ).and(
  175. SiteNavigationMenuItemTable.INSTANCE.typeSettings.like(
  176. typeSettingsKeyword)
  177. )
  178. ));
  179. }
  180. @Override
  181. public List<SiteNavigationMenuItem> getSiteNavigationMenuItems(
  182. long siteNavigationMenuId) {
  183. return siteNavigationMenuItemPersistence.findBySiteNavigationMenuId(
  184. siteNavigationMenuId);
  185. }
  186. @Override
  187. public List<SiteNavigationMenuItem> getSiteNavigationMenuItems(
  188. long siteNavigationMenuId, long parentSiteNavigationMenuItemId) {
  189. return siteNavigationMenuItemPersistence.findByS_P(
  190. siteNavigationMenuId, parentSiteNavigationMenuItemId,
  191. QueryUtil.ALL_POS, QueryUtil.ALL_POS,
  192. new SiteNavigationMenuItemOrderComparator());
  193. }
  194. @Override
  195. public int getSiteNavigationMenuItemsCount(long siteNavigationMenuId) {
  196. return siteNavigationMenuItemPersistence.countBySiteNavigationMenuId(
  197. siteNavigationMenuId);
  198. }
  199. @Override
  200. public SiteNavigationMenuItem updateSiteNavigationMenuItem(
  201. long siteNavigationMenuItemId, long parentSiteNavigationMenuItemId,
  202. int order)
  203. throws PortalException {
  204. // Site navigation menu item
  205. SiteNavigationMenuItem siteNavigationMenuItem =
  206. siteNavigationMenuItemPersistence.fetchByPrimaryKey(
  207. siteNavigationMenuItemId);
  208. validate(
  209. siteNavigationMenuItem.getSiteNavigationMenuId(),
  210. siteNavigationMenuItemId, parentSiteNavigationMenuItemId);
  211. long oldParentSiteNavigationMenuItemId =
  212. siteNavigationMenuItem.getParentSiteNavigationMenuItemId();
  213. int oldOrder = siteNavigationMenuItem.getOrder();
  214. siteNavigationMenuItem.setParentSiteNavigationMenuItemId(
  215. parentSiteNavigationMenuItemId);
  216. siteNavigationMenuItem.setOrder(order);
  217. siteNavigationMenuItem = siteNavigationMenuItemPersistence.update(
  218. siteNavigationMenuItem);
  219. // Child site navigation menu item
  220. int newOrder = 0;
  221. List<SiteNavigationMenuItem> children = getSiteNavigationMenuItems(
  222. siteNavigationMenuItem.getSiteNavigationMenuId(),
  223. parentSiteNavigationMenuItemId);
  224. for (SiteNavigationMenuItem child : children) {
  225. if (newOrder == order) {
  226. newOrder++;
  227. }
  228. if (child.getSiteNavigationMenuItemId() ==
  229. siteNavigationMenuItemId) {
  230. continue;
  231. }
  232. child.setOrder(newOrder++);
  233. siteNavigationMenuItemPersistence.update(child);
  234. }
  235. if (parentSiteNavigationMenuItemId !=
  236. oldParentSiteNavigationMenuItemId) {
  237. List<SiteNavigationMenuItem> oldChildren =
  238. getSiteNavigationMenuItems(
  239. siteNavigationMenuItem.getSiteNavigationMenuId(),
  240. oldParentSiteNavigationMenuItemId);
  241. for (SiteNavigationMenuItem oldChild : oldChildren) {
  242. if (oldChild.getOrder() <= oldOrder) {
  243. continue;
  244. }
  245. oldChild.setOrder(oldChild.getOrder() - 1);
  246. siteNavigationMenuItemPersistence.update(oldChild);
  247. }
  248. }
  249. return siteNavigationMenuItem;
  250. }
  251. @Override
  252. public SiteNavigationMenuItem updateSiteNavigationMenuItem(
  253. long userId, long siteNavigationMenuItemId, long groupId,
  254. long siteNavigationMenuId, long parentSiteNavigationMenuItemId,
  255. String type, int order, String typeSettings)
  256. throws PortalException {
  257. SiteNavigationMenuItem siteNavigationMenuItem =
  258. siteNavigationMenuItemPersistence.findByPrimaryKey(
  259. siteNavigationMenuItemId);
  260. siteNavigationMenuItem.setGroupId(groupId);
  261. siteNavigationMenuItem.setUserId(userId);
  262. siteNavigationMenuItem.setSiteNavigationMenuId(siteNavigationMenuId);
  263. siteNavigationMenuItem.setParentSiteNavigationMenuItemId(
  264. parentSiteNavigationMenuItemId);
  265. siteNavigationMenuItem.setType(type);
  266. siteNavigationMenuItem.setTypeSettings(typeSettings);
  267. siteNavigationMenuItem.setOrder(order);
  268. return siteNavigationMenuItemPersistence.update(siteNavigationMenuItem);
  269. }
  270. @Override
  271. public SiteNavigationMenuItem updateSiteNavigationMenuItem(
  272. long userId, long siteNavigationMenuItemId, String typeSettings,
  273. ServiceContext serviceContext)
  274. throws PortalException {
  275. SiteNavigationMenuItem siteNavigationMenuItem =
  276. siteNavigationMenuItemPersistence.fetchByPrimaryKey(
  277. siteNavigationMenuItemId);
  278. SiteNavigationMenuItemType siteNavigationMenuItemType =
  279. _siteNavigationMenuItemTypeRegistry.getSiteNavigationMenuItemType(
  280. siteNavigationMenuItem.getType());
  281. if (siteNavigationMenuItemType == null) {
  282. throw new InvalidSiteNavigationMenuItemTypeException(
  283. siteNavigationMenuItem.getType());
  284. }
  285. User user = _userLocalService.getUser(userId);
  286. String name = siteNavigationMenuItemType.getName(typeSettings);
  287. validateName(name);
  288. validateLayout(typeSettings);
  289. siteNavigationMenuItem.setUserId(userId);
  290. siteNavigationMenuItem.setUserName(user.getFullName());
  291. siteNavigationMenuItem.setModifiedDate(
  292. serviceContext.getModifiedDate(new Date()));
  293. siteNavigationMenuItem.setName(name);
  294. siteNavigationMenuItem.setTypeSettings(typeSettings);
  295. siteNavigationMenuItem.setExpandoBridgeAttributes(serviceContext);
  296. return siteNavigationMenuItemPersistence.update(siteNavigationMenuItem);
  297. }
  298. protected void validate(
  299. long siteNavigationMenuId, long siteNavigationMenuItemId,
  300. long parentSiteNavigationMenuItemId)
  301. throws PortalException {
  302. List<SiteNavigationMenuItem> siteNavigationMenuItems =
  303. getSiteNavigationMenuItems(
  304. siteNavigationMenuId, siteNavigationMenuItemId);
  305. for (SiteNavigationMenuItem siteNavigationMenuItem :
  306. siteNavigationMenuItems) {
  307. siteNavigationMenuItemId =
  308. siteNavigationMenuItem.getSiteNavigationMenuItemId();
  309. if (siteNavigationMenuItemId == parentSiteNavigationMenuItemId) {
  310. throw new InvalidSiteNavigationMenuItemOrderException();
  311. }
  312. validate(
  313. siteNavigationMenuId, siteNavigationMenuItemId,
  314. parentSiteNavigationMenuItemId);
  315. }
  316. }
  317. protected void validateLayout(String typeSettings) throws PortalException {
  318. UnicodeProperties typeSettingsUnicodeProperties =
  319. UnicodePropertiesBuilder.create(
  320. true
  321. ).fastLoad(
  322. typeSettings
  323. ).build();
  324. String layoutUuid = typeSettingsUnicodeProperties.getProperty(
  325. "layoutUuid");
  326. if (Validator.isNull(layoutUuid)) {
  327. return;
  328. }
  329. long groupId = GetterUtil.getLong(
  330. typeSettingsUnicodeProperties.getProperty("groupId"));
  331. boolean privateLayout = GetterUtil.getBoolean(
  332. typeSettingsUnicodeProperties.getProperty("privateLayout"));
  333. _layoutService.getLayoutByUuidAndGroupId(
  334. layoutUuid, groupId, privateLayout);
  335. }
  336. protected void validateName(String name) throws PortalException {
  337. if (name == null) {
  338. return;
  339. }
  340. int maxLength = ModelHintsUtil.getMaxLength(
  341. SiteNavigationMenuItem.class.getName(), "name");
  342. if (name.length() > maxLength) {
  343. throw new SiteNavigationMenuItemNameException(
  344. "Maximum length of name exceeded");
  345. }
  346. }
  347. @Reference
  348. private LayoutService _layoutService;
  349. @Reference
  350. private SiteNavigationMenuItemTypeRegistry
  351. _siteNavigationMenuItemTypeRegistry;
  352. @Reference
  353. private SiteNavigationMenuPersistence _siteNavigationMenuPersistence;
  354. @Reference
  355. private UserLocalService _userLocalService;
  356. }