/modules/apps/asset/asset-link-service/src/main/java/com/liferay/asset/link/internal/exportimport/staged/model/repository/StagedAssetLinkStagedModelRepository.java

https://github.com/kiyoshilee/liferay-portal · Java · 310 lines · 207 code · 82 blank · 21 comment · 14 complexity · 5b6cf31363df52d8a6282c86aece6ef1 MD5 · raw file

  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.asset.link.internal.exportimport.staged.model.repository;
  15. import com.liferay.asset.kernel.model.AssetEntry;
  16. import com.liferay.asset.kernel.model.AssetLink;
  17. import com.liferay.asset.kernel.model.adapter.StagedAssetLink;
  18. import com.liferay.asset.kernel.service.AssetEntryLocalService;
  19. import com.liferay.asset.kernel.service.AssetLinkLocalService;
  20. import com.liferay.asset.util.StagingAssetEntryHelper;
  21. import com.liferay.exportimport.kernel.lar.PortletDataContext;
  22. import com.liferay.exportimport.staged.model.repository.StagedModelRepository;
  23. import com.liferay.petra.string.StringPool;
  24. import com.liferay.portal.kernel.dao.orm.Criterion;
  25. import com.liferay.portal.kernel.dao.orm.DynamicQuery;
  26. import com.liferay.portal.kernel.dao.orm.ExportActionableDynamicQuery;
  27. import com.liferay.portal.kernel.dao.orm.OrderFactoryUtil;
  28. import com.liferay.portal.kernel.dao.orm.Projection;
  29. import com.liferay.portal.kernel.dao.orm.ProjectionFactoryUtil;
  30. import com.liferay.portal.kernel.dao.orm.Property;
  31. import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
  32. import com.liferay.portal.kernel.exception.PortalException;
  33. import com.liferay.portal.kernel.model.adapter.ModelAdapterUtil;
  34. import com.liferay.portal.kernel.util.ListUtil;
  35. import java.util.Collections;
  36. import java.util.List;
  37. import org.osgi.service.component.annotations.Component;
  38. import org.osgi.service.component.annotations.Reference;
  39. /**
  40. * @author Akos Thurzo
  41. */
  42. @Component(
  43. immediate = true,
  44. property = "model.class.name=com.liferay.asset.kernel.model.adapter.StagedAssetLink",
  45. service = {
  46. StagedAssetLinkStagedModelRepository.class, StagedModelRepository.class
  47. }
  48. )
  49. public class StagedAssetLinkStagedModelRepository
  50. implements StagedModelRepository<StagedAssetLink> {
  51. @Override
  52. public StagedAssetLink addStagedModel(
  53. PortletDataContext portletDataContext,
  54. StagedAssetLink stagedAssetLink)
  55. throws PortalException {
  56. AssetEntry assetEntry1 = _stagingAssetEntryHelper.fetchAssetEntry(
  57. portletDataContext.getScopeGroupId(),
  58. stagedAssetLink.getEntry1Uuid());
  59. AssetEntry assetEntry2 = _stagingAssetEntryHelper.fetchAssetEntry(
  60. portletDataContext.getScopeGroupId(),
  61. stagedAssetLink.getEntry2Uuid());
  62. if ((assetEntry1 == null) || (assetEntry2 == null)) {
  63. return null;
  64. }
  65. AssetLink assetLink = _assetLinkLocalService.addLink(
  66. portletDataContext.getUserId(stagedAssetLink.getUserUuid()),
  67. assetEntry1.getEntryId(), assetEntry2.getEntryId(),
  68. stagedAssetLink.getType(), stagedAssetLink.getWeight());
  69. return ModelAdapterUtil.adapt(
  70. assetLink, AssetLink.class, StagedAssetLink.class);
  71. }
  72. @Override
  73. public void deleteStagedModel(StagedAssetLink stagedAssetLink)
  74. throws PortalException {
  75. _assetLinkLocalService.deleteLink(stagedAssetLink);
  76. }
  77. @Override
  78. public void deleteStagedModel(
  79. String uuid, long groupId, String className, String extraData)
  80. throws PortalException {
  81. StagedAssetLink stagedAssetLink = fetchExistingAssetLink(
  82. groupId, parseAssetEntry1Uuid(uuid), parseAssetEntry2Uuid(uuid));
  83. if (stagedAssetLink != null) {
  84. deleteStagedModel(stagedAssetLink);
  85. }
  86. }
  87. @Override
  88. public void deleteStagedModels(PortletDataContext portletDataContext)
  89. throws PortalException {
  90. _assetLinkLocalService.deleteGroupLinks(
  91. portletDataContext.getScopeGroupId());
  92. }
  93. public StagedAssetLink fetchExistingAssetLink(
  94. long groupId, String assetEntry1Uuid, String assetEntry2Uuid)
  95. throws PortalException {
  96. AssetEntry assetEntry1 = _stagingAssetEntryHelper.fetchAssetEntry(
  97. groupId, assetEntry1Uuid);
  98. AssetEntry assetEntry2 = _stagingAssetEntryHelper.fetchAssetEntry(
  99. groupId, assetEntry2Uuid);
  100. if ((assetEntry1 == null) || (assetEntry2 == null)) {
  101. return null;
  102. }
  103. DynamicQuery dynamicQuery = getAssetLinkDynamicQuery(
  104. assetEntry1.getEntryId(), assetEntry2.getEntryId());
  105. List<AssetLink> assetLinks = _assetLinkLocalService.dynamicQuery(
  106. dynamicQuery);
  107. if (ListUtil.isNotEmpty(assetLinks)) {
  108. return ModelAdapterUtil.adapt(
  109. assetLinks.get(0), AssetLink.class, StagedAssetLink.class);
  110. }
  111. return null;
  112. }
  113. @Override
  114. public StagedAssetLink fetchStagedModelByUuidAndGroupId(
  115. String uuid, long groupId) {
  116. return null;
  117. }
  118. @Override
  119. public List<StagedAssetLink> fetchStagedModelsByUuidAndCompanyId(
  120. String uuid, long companyId) {
  121. DynamicQuery dynamicQuery = getAssetLinkDynamicQuery(
  122. companyId, 0, parseAssetEntry1Uuid(uuid),
  123. parseAssetEntry2Uuid(uuid));
  124. dynamicQuery.addOrder(OrderFactoryUtil.desc("linkId"));
  125. List<AssetLink> assetLinks = _assetLinkLocalService.dynamicQuery(
  126. dynamicQuery);
  127. if (ListUtil.isNotEmpty(assetLinks)) {
  128. return ModelAdapterUtil.adapt(
  129. assetLinks, AssetLink.class, StagedAssetLink.class);
  130. }
  131. return Collections.emptyList();
  132. }
  133. @Override
  134. public ExportActionableDynamicQuery getExportActionableDynamicQuery(
  135. PortletDataContext portletDataContext) {
  136. return new ExportActionableDynamicQuery();
  137. }
  138. @Override
  139. public StagedAssetLink getStagedModel(long assetLinkId)
  140. throws PortalException {
  141. return ModelAdapterUtil.adapt(
  142. _assetLinkLocalService.getAssetLink(assetLinkId), AssetLink.class,
  143. StagedAssetLink.class);
  144. }
  145. @Override
  146. public StagedAssetLink saveStagedModel(StagedAssetLink stagedAssetLink)
  147. throws PortalException {
  148. AssetLink assetLink = _assetLinkLocalService.updateAssetLink(
  149. stagedAssetLink);
  150. return ModelAdapterUtil.adapt(
  151. assetLink, AssetLink.class, StagedAssetLink.class);
  152. }
  153. @Override
  154. public StagedAssetLink updateStagedModel(
  155. PortletDataContext portletDataContext,
  156. StagedAssetLink stagedAssetLink)
  157. throws PortalException {
  158. long userId = portletDataContext.getUserId(
  159. stagedAssetLink.getUserUuid());
  160. AssetLink assetLink = _assetLinkLocalService.updateLink(
  161. userId, stagedAssetLink.getEntryId1(),
  162. stagedAssetLink.getEntryId2(), stagedAssetLink.getType(),
  163. stagedAssetLink.getWeight());
  164. return ModelAdapterUtil.adapt(
  165. assetLink, AssetLink.class, StagedAssetLink.class);
  166. }
  167. protected DynamicQuery getAssetLinkDynamicQuery(
  168. long entryId1, long entryId2) {
  169. DynamicQuery dynamicQuery = _assetLinkLocalService.dynamicQuery();
  170. Property entryId1IdProperty = PropertyFactoryUtil.forName("entryId1");
  171. dynamicQuery.add(entryId1IdProperty.eq(entryId1));
  172. Property entryId2IdProperty = PropertyFactoryUtil.forName("entryId2");
  173. dynamicQuery.add(entryId2IdProperty.eq(entryId2));
  174. return dynamicQuery;
  175. }
  176. protected DynamicQuery getAssetLinkDynamicQuery(
  177. long companyId, long groupId, String assetEntry1Uuid,
  178. String assetEntry2Uuid) {
  179. // Asset entry 1 dynamic query
  180. Projection entryIdProjection = ProjectionFactoryUtil.property(
  181. "entryId");
  182. DynamicQuery assetEntry1DynamicQuery =
  183. _assetEntryLocalService.dynamicQuery();
  184. assetEntry1DynamicQuery.setProjection(entryIdProjection);
  185. Property classUuidProperty = PropertyFactoryUtil.forName("classUuid");
  186. assetEntry1DynamicQuery.add(classUuidProperty.eq(assetEntry1Uuid));
  187. // Asset entry 2 dynamic query
  188. DynamicQuery assetEntry2DynamicQuery =
  189. _assetEntryLocalService.dynamicQuery();
  190. assetEntry2DynamicQuery.setProjection(entryIdProjection);
  191. assetEntry2DynamicQuery.add(classUuidProperty.eq(assetEntry2Uuid));
  192. // Asset link dynamic query
  193. DynamicQuery dynamicQuery = _assetLinkLocalService.dynamicQuery();
  194. Property entryId1IdProperty = PropertyFactoryUtil.forName("entryId1");
  195. dynamicQuery.add(entryId1IdProperty.eq(assetEntry1DynamicQuery));
  196. Property entryId2IdProperty = PropertyFactoryUtil.forName("entryId2");
  197. dynamicQuery.add(entryId2IdProperty.eq(assetEntry2DynamicQuery));
  198. // Company ID
  199. if (companyId > 0) {
  200. Property companyIdProperty = PropertyFactoryUtil.forName(
  201. "companyId");
  202. Criterion companyIdCriterion = companyIdProperty.eq(companyId);
  203. assetEntry1DynamicQuery.add(companyIdCriterion);
  204. assetEntry2DynamicQuery.add(companyIdCriterion);
  205. dynamicQuery.add(companyIdCriterion);
  206. }
  207. // Group ID
  208. if (groupId > 0) {
  209. Property groupIdProperty = PropertyFactoryUtil.forName("groupId");
  210. Criterion groupIdCriterion = groupIdProperty.eq(groupId);
  211. assetEntry1DynamicQuery.add(groupIdCriterion);
  212. assetEntry2DynamicQuery.add(groupIdCriterion);
  213. }
  214. return dynamicQuery;
  215. }
  216. protected String parseAssetEntry1Uuid(String uuid) {
  217. return uuid.substring(0, uuid.indexOf(StringPool.POUND));
  218. }
  219. protected String parseAssetEntry2Uuid(String uuid) {
  220. return uuid.substring(uuid.indexOf(StringPool.POUND) + 1);
  221. }
  222. @Reference
  223. private AssetEntryLocalService _assetEntryLocalService;
  224. @Reference
  225. private AssetLinkLocalService _assetLinkLocalService;
  226. @Reference
  227. private StagingAssetEntryHelper _stagingAssetEntryHelper;
  228. }