/**
* 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.layout.set.internal.exportimport.staged.model.repository;
import com.liferay.exportimport.kernel.lar.PortletDataContext;
import com.liferay.exportimport.kernel.lar.PortletDataHandlerKeys;
import com.liferay.exportimport.staged.model.repository.StagedModelRepository;
import com.liferay.exportimport.staged.model.repository.base.BaseStagedModelRepository;
import com.liferay.layout.set.model.adapter.StagedLayoutSet;
import com.liferay.portal.kernel.dao.orm.DynamicQuery;
import com.liferay.portal.kernel.dao.orm.ExportActionableDynamicQuery;
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.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.model.Layout;
import com.liferay.portal.kernel.model.LayoutSet;
import com.liferay.portal.kernel.model.StagedModel;
import com.liferay.portal.kernel.model.adapter.ModelAdapterUtil;
import com.liferay.portal.kernel.service.LayoutLocalService;
import com.liferay.portal.kernel.service.LayoutSetLocalService;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.MapUtil;
import com.liferay.portal.kernel.util.Validator;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
/**
* @author Mate Thurzo
*/
@Component(
immediate = true,
property = {
"model.class.name=com.liferay.layout.set.model.adapter.StagedLayoutSet"
},
service = {
StagedLayoutSetStagedModelRepository.class, StagedModelRepository.class
}
)
public class StagedLayoutSetStagedModelRepository
extends BaseStagedModelRepository<StagedLayoutSet> {
public StagedLayoutSet addStagedModel(
PortletDataContext portletDataContext,
StagedLayoutSet stagedLayoutSet)
throws PortalException {
// Not supported for layout sets
return null;
}
public void deleteStagedModel(StagedLayoutSet stagedLayoutSet)
throws PortalException {
// Not supported for layout sets
}
@Override
public void deleteStagedModel(
String uuid, long groupId, String className, String extraData)
throws PortalException {
// Not supported for layout sets
}
@Override
public void deleteStagedModels(PortletDataContext portletDataContext)
throws PortalException {
// Not supported for layout sets
}
public List<StagedModel> fetchChildrenStagedModels(
PortletDataContext portletDataContext,
StagedLayoutSet stagedLayoutSet) {
List<Layout> layouts = _layoutLocalService.getLayouts(
stagedLayoutSet.getGroupId(), stagedLayoutSet.isPrivateLayout());
Stream<Layout> layoutsStream = layouts.stream();
return layoutsStream.map((layout) -> (StagedModel)layout).collect(
Collectors.toList());
}
public Optional<StagedLayoutSet> fetchExistingLayoutSet(
long groupId, boolean privateLayout) {
StagedLayoutSet stagedLayoutSet = null;
try {
LayoutSet layoutSet = _layoutSetLocalService.getLayoutSet(
groupId, privateLayout);
stagedLayoutSet = ModelAdapterUtil.adapt(
layoutSet, LayoutSet.class, StagedLayoutSet.class);
}
catch (PortalException pe) {
// LPS-52675
if (_log.isDebugEnabled()) {
_log.debug(pe, pe);
}
}
return Optional.ofNullable(stagedLayoutSet);
}
@Override
public StagedLayoutSet fetchStagedModelByUuidAndGroupId(
String uuid, long groupId) {
boolean privateLayout = GetterUtil.getBoolean(uuid);
try {
LayoutSet layoutSet = _layoutSetLocalService.getLayoutSet(
groupId, privateLayout);
return ModelAdapterUtil.adapt(
layoutSet, LayoutSet.class, StagedLayoutSet.class);
}
catch (PortalException pe) {
// LPS-52675
if (_log.isDebugEnabled()) {
_log.debug(pe, pe);
}
return null;
}
}
@Override
public List<StagedLayoutSet> fetchStagedModelsByUuidAndCompanyId(
String uuid, long companyId) {
boolean privateLayout = GetterUtil.getBoolean(uuid);
DynamicQuery dynamicQuery = _layoutSetLocalService.dynamicQuery();
Property companyIdProperty = PropertyFactoryUtil.forName("companyId");
dynamicQuery.add(companyIdProperty.eq(companyId));
Property privateLayoutProperty = PropertyFactoryUtil.forName(
"privateLayout");
dynamicQuery.add(privateLayoutProperty.eq(privateLayout));
List<LayoutSet> layoutSets = dynamicQuery.list();
Stream<LayoutSet> layoutSetsStream = layoutSets.stream();
Stream<StagedLayoutSet> stagedLayoutSetsStream = layoutSetsStream.map(
(layoutSet) -> ModelAdapterUtil.adapt(
layoutSet, LayoutSet.class, StagedLayoutSet.class));
return stagedLayoutSetsStream.collect(Collectors.toList());
}
@Override
public ExportActionableDynamicQuery getExportActionableDynamicQuery(
PortletDataContext portletDataContext) {
return null;
}
public StagedLayoutSet saveStagedModel(StagedLayoutSet stagedLayoutSet)
throws PortalException {
LayoutSet layoutSet = _layoutSetLocalService.updateLayoutSet(
stagedLayoutSet);
return ModelAdapterUtil.adapt(
layoutSet, LayoutSet.class, StagedLayoutSet.class);
}
public StagedLayoutSet updateStagedModel(
PortletDataContext portletDataContext,
StagedLayoutSet stagedLayoutSet)
throws PortalException {
LayoutSet existingLayoutSet = _layoutSetLocalService.fetchLayoutSet(
stagedLayoutSet.getLayoutSetId());
// Layout set prototype settings
boolean layoutSetPrototypeLinkEnabled = MapUtil.getBoolean(
portletDataContext.getParameterMap(),
PortletDataHandlerKeys.LAYOUT_SET_PROTOTYPE_LINK_ENABLED);
boolean layoutSetPrototypeSettings = MapUtil.getBoolean(
portletDataContext.getParameterMap(),
PortletDataHandlerKeys.LAYOUT_SET_PROTOTYPE_SETTINGS);
if (layoutSetPrototypeSettings ||
Validator.isNotNull(stagedLayoutSet.getLayoutSetPrototypeUuid())) {
existingLayoutSet.setLayoutSetPrototypeUuid(
stagedLayoutSet.getLayoutSetPrototypeUuid());
existingLayoutSet.setLayoutSetPrototypeLinkEnabled(
layoutSetPrototypeLinkEnabled);
existingLayoutSet = _layoutSetLocalService.updateLayoutSet(
existingLayoutSet);
}
// Layout set settings
boolean layoutSetSettings = MapUtil.getBoolean(
portletDataContext.getParameterMap(),
PortletDataHandlerKeys.LAYOUT_SET_SETTINGS);
if (layoutSetSettings) {
existingLayoutSet = _layoutSetLocalService.updateSettings(
existingLayoutSet.getGroupId(),
existingLayoutSet.isPrivateLayout(),
stagedLayoutSet.getSettings());
}
return ModelAdapterUtil.adapt(
existingLayoutSet, LayoutSet.class, StagedLayoutSet.class);
}
private static final Log _log = LogFactoryUtil.getLog(
StagedLayoutSetStagedModelRepository.class);
@Reference
private LayoutLocalService _layoutLocalService;
@Reference
private LayoutSetLocalService _layoutSetLocalService;
}