/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.asset.exportimport.staged.model.repository;
import com.liferay.asset.kernel.model.AssetEntry;
import com.liferay.asset.kernel.model.AssetLink;
import com.liferay.asset.kernel.model.adapter.StagedAssetLink;
import com.liferay.asset.kernel.service.AssetEntryLocalService;
import com.liferay.asset.kernel.service.AssetLinkLocalService;
import com.liferay.exportimport.kernel.lar.PortletDataContext;
import com.liferay.exportimport.staged.model.repository.StagedModelRepository;
import com.liferay.exportimport.staged.model.repository.base.BaseStagedModelRepository;
import com.liferay.portal.kernel.dao.orm.Criterion;
import com.liferay.portal.kernel.dao.orm.DynamicQuery;
import com.liferay.portal.kernel.dao.orm.ExportActionableDynamicQuery;
import com.liferay.portal.kernel.dao.orm.OrderFactoryUtil;
import com.liferay.portal.kernel.dao.orm.Projection;
import com.liferay.portal.kernel.dao.orm.ProjectionFactoryUtil;
import com.liferay.portal.kernel.dao.orm.Property;
import com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil;
import com.liferay.portal.kernel.exception.PortalException;
import com.liferay.portal.kernel.model.adapter.ModelAdapterUtil;
import com.liferay.portal.kernel.util.ListUtil;
import com.liferay.portal.kernel.util.StringPool;
import java.util.Collections;
import java.util.List;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
/**
* @author Akos Thurzo
*/
@Component(
immediate = true,
property = {
"model.class.name=com.liferay.asset.kernel.model.adapter.StagedAssetLink"
},
service = {
StagedAssetLinkStagedModelRepository.class, StagedModelRepository.class
}
)
public class StagedAssetLinkStagedModelRepository
extends BaseStagedModelRepository<StagedAssetLink> {
@Override
public StagedAssetLink addStagedModel(
PortletDataContext portletDataContext,
StagedAssetLink stagedAssetLink)
throws PortalException {
long userId = portletDataContext.getUserId(
stagedAssetLink.getUserUuid());
AssetEntry assetEntry1 = _assetEntryLocalService.fetchEntry(
portletDataContext.getScopeGroupId(),
stagedAssetLink.getEntry1Uuid());
AssetEntry assetEntry2 = _assetEntryLocalService.fetchEntry(
portletDataContext.getScopeGroupId(),
stagedAssetLink.getEntry2Uuid());
if ((assetEntry1 == null) || (assetEntry2 == null)) {
return null;
}
AssetLink assetLink = _assetLinkLocalService.addLink(
userId, assetEntry1.getEntryId(), assetEntry2.getEntryId(),
stagedAssetLink.getType(), stagedAssetLink.getWeight());
return ModelAdapterUtil.adapt(
assetLink, AssetLink.class, StagedAssetLink.class);
}
@Override
public void deleteStagedModel(StagedAssetLink stagedAssetLink)
throws PortalException {
_assetLinkLocalService.deleteAssetLink(stagedAssetLink);
}
@Override
public void deleteStagedModel(
String uuid, long groupId, String className, String extraData)
throws PortalException {
StagedAssetLink stagedAssetLink = fetchExistingAssetLink(
groupId, parseAssetEntry1Uuid(uuid), parseAssetEntry2Uuid(uuid));
if (stagedAssetLink != null) {
deleteStagedModel(stagedAssetLink);
}
}
@Override
public void deleteStagedModels(PortletDataContext portletDataContext)
throws PortalException {
_assetLinkLocalService.deleteGroupLinks(
portletDataContext.getScopeGroupId());
}
public StagedAssetLink fetchExistingAssetLink(
long groupId, String assetEntry1Uuid, String assetEntry2Uuid) {
DynamicQuery dynamicQuery = getAssetLinkDynamicQuery(
0, groupId, assetEntry1Uuid, assetEntry2Uuid);
List<AssetLink> assetLinks = _assetLinkLocalService.dynamicQuery(
dynamicQuery);
if (ListUtil.isNotEmpty(assetLinks)) {
return ModelAdapterUtil.adapt(
assetLinks.get(0), AssetLink.class, StagedAssetLink.class);
}
return null;
}
@Override
public List<StagedAssetLink> fetchStagedModelsByUuidAndCompanyId(
String uuid, long companyId) {
DynamicQuery dynamicQuery = getAssetLinkDynamicQuery(
companyId, 0, parseAssetEntry1Uuid(uuid),
parseAssetEntry2Uuid(uuid));
dynamicQuery.addOrder(OrderFactoryUtil.desc("linkId"));
List<AssetLink> assetLinks = _assetLinkLocalService.dynamicQuery(
dynamicQuery);
if (ListUtil.isNotEmpty(assetLinks)) {
return ModelAdapterUtil.adapt(
assetLinks, AssetLink.class, StagedAssetLink.class);
}
return Collections.emptyList();
}
@Override
public ExportActionableDynamicQuery getExportActionableDynamicQuery(
PortletDataContext portletDataContext) {
return _assetLinkLocalService.getExportActionbleDynamicQuery(
portletDataContext);
}
@Override
public StagedAssetLink saveStagedModel(StagedAssetLink stagedAssetLink)
throws PortalException {
AssetLink assetLink = _assetLinkLocalService.updateAssetLink(
stagedAssetLink);
return ModelAdapterUtil.adapt(
assetLink, AssetLink.class, StagedAssetLink.class);
}
@Override
public StagedAssetLink updateStagedModel(
PortletDataContext portletDataContext,
StagedAssetLink stagedAssetLink)
throws PortalException {
long userId = portletDataContext.getUserId(
stagedAssetLink.getUserUuid());
AssetLink assetLink = _assetLinkLocalService.updateLink(
userId, stagedAssetLink.getEntryId1(),
stagedAssetLink.getEntryId2(), stagedAssetLink.getType(),
stagedAssetLink.getWeight());
return ModelAdapterUtil.adapt(
assetLink, AssetLink.class, StagedAssetLink.class);
}
protected DynamicQuery getAssetLinkDynamicQuery(
long companyId, long groupId, String assetEntry1Uuid,
String assetEntry2Uuid) {
// Asset entry 1 dynamic query
Projection entryIdProjection = ProjectionFactoryUtil.property(
"entryId");
DynamicQuery assetEntry1DynamicQuery =
_assetEntryLocalService.dynamicQuery();
assetEntry1DynamicQuery.setProjection(entryIdProjection);
Property classUuidProperty = PropertyFactoryUtil.forName("classUuid");
assetEntry1DynamicQuery.add(classUuidProperty.eq(assetEntry1Uuid));
// Asset entry 2 dynamic query
DynamicQuery assetEntry2DynamicQuery =
_assetEntryLocalService.dynamicQuery();
assetEntry2DynamicQuery.setProjection(entryIdProjection);
assetEntry2DynamicQuery.add(classUuidProperty.eq(assetEntry2Uuid));
// Asset link dynamic query
DynamicQuery dynamicQuery = _assetLinkLocalService.dynamicQuery();
Property entryId1IdProperty = PropertyFactoryUtil.forName("entryId1");
dynamicQuery.add(entryId1IdProperty.eq(assetEntry1DynamicQuery));
Property entryId2IdProperty = PropertyFactoryUtil.forName("entryId2");
dynamicQuery.add(entryId2IdProperty.eq(assetEntry2DynamicQuery));
// Company ID
if (companyId > 0) {
Property companyIdProperty = PropertyFactoryUtil.forName(
"companyId");
Criterion companyIdCriterion = companyIdProperty.eq(companyId);
assetEntry1DynamicQuery.add(companyIdCriterion);
assetEntry2DynamicQuery.add(companyIdCriterion);
dynamicQuery.add(companyIdCriterion);
}
// Group ID
if (groupId > 0) {
Property groupIdProperty = PropertyFactoryUtil.forName("groupId");
Criterion groupIdCriterion = groupIdProperty.eq(groupId);
assetEntry1DynamicQuery.add(groupIdCriterion);
assetEntry2DynamicQuery.add(groupIdCriterion);
}
return dynamicQuery;
}
protected String parseAssetEntry1Uuid(String uuid) {
return uuid.substring(0, uuid.indexOf(StringPool.POUND));
}
protected String parseAssetEntry2Uuid(String uuid) {
return uuid.substring(uuid.indexOf(StringPool.POUND) + 1);
}
@Reference(unbind = "-")
protected void setAssetEntryLocalService(
AssetEntryLocalService assetEntryLocalService) {
_assetEntryLocalService = assetEntryLocalService;
}
@Reference(unbind = "-")
protected void setAssetLinkLocalService(
AssetLinkLocalService assetLinkLocalService) {
_assetLinkLocalService = assetLinkLocalService;
}
private AssetEntryLocalService _assetEntryLocalService;
private AssetLinkLocalService _assetLinkLocalService;
}