/** * 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.exportimport.internal.upgrade.v1_0_0; import com.liferay.exportimport.kernel.configuration.ExportImportConfigurationConstants; import com.liferay.exportimport.kernel.configuration.ExportImportConfigurationSettingsMapFactory; import com.liferay.exportimport.kernel.lar.ExportImportHelperUtil; import com.liferay.exportimport.kernel.model.ExportImportConfiguration; import com.liferay.exportimport.kernel.service.ExportImportConfigurationLocalService; import com.liferay.exportimport.kernel.staging.StagingUtil; import com.liferay.portal.kernel.dao.orm.QueryUtil; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.messaging.DestinationNames; import com.liferay.portal.kernel.messaging.Message; import com.liferay.portal.kernel.model.Group; import com.liferay.portal.kernel.model.User; import com.liferay.portal.kernel.scheduler.SchedulerEngineHelper; import com.liferay.portal.kernel.scheduler.StorageType; import com.liferay.portal.kernel.scheduler.messaging.SchedulerResponse; import com.liferay.portal.kernel.service.GroupLocalService; import com.liferay.portal.kernel.service.UserLocalService; import com.liferay.portal.kernel.upgrade.UpgradeProcess; import com.liferay.portal.kernel.util.LoggingTimer; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * @author Daniel Kocsis */ public class UpgradePublisherRequest extends UpgradeProcess { public UpgradePublisherRequest( ExportImportConfigurationLocalService exportImportConfigurationLocalService, GroupLocalService groupLocalService, SchedulerEngineHelper schedulerEngineHelper, UserLocalService userLocalService) { _exportImportConfigurationLocalService = exportImportConfigurationLocalService; _groupLocalService = groupLocalService; _schedulerEngineHelper = schedulerEngineHelper; _userLocalService = userLocalService; } @Override protected void doUpgrade() throws Exception { List<Group> groups = _groupLocalService.getStagedSites(); for (Group group : groups) { updateScheduledPublications(group); } } protected List<Group> getGroups() { List<Group> groups = _groupLocalService.getGroups( QueryUtil.ALL_POS, QueryUtil.ALL_POS); List<Group> filteredGroups = new ArrayList<>(groups.size()); for (Group group : groups) { if (!group.isStaged() && !group.hasLocalOrRemoteStagingGroup()) { continue; } filteredGroups.add(group); } return filteredGroups; } protected String getSchedulerGroupName(long groupId, boolean localStaging) throws PortalException { String destinationName = DestinationNames.LAYOUTS_LOCAL_PUBLISHER; if (!localStaging) { destinationName = DestinationNames.LAYOUTS_REMOTE_PUBLISHER; } return StagingUtil.getSchedulerGroupName(destinationName, groupId); } protected void updateScheduledLocalPublication( SchedulerResponse schedulerResponse) throws PortalException { Message message = schedulerResponse.getMessage(); LayoutsLocalPublisherRequest publisherRequest = (LayoutsLocalPublisherRequest)message.getPayload(); User user = _userLocalService.getUser(publisherRequest.getUserId()); Map<String, Serializable> publishLayoutLocalSettingsMap = ExportImportConfigurationSettingsMapFactory. buildPublishLayoutLocalSettingsMap( user, publisherRequest.getSourceGroupId(), publisherRequest.getTargetGroupId(), publisherRequest.isPrivateLayout(), ExportImportHelperUtil.getLayoutIds( publisherRequest.getLayoutIdMap()), publisherRequest.getParameterMap()); ExportImportConfiguration exportImportConfiguration = _exportImportConfigurationLocalService. addDraftExportImportConfiguration( user.getUserId(), schedulerResponse.getDescription(), ExportImportConfigurationConstants. TYPE_SCHEDULED_PUBLISH_LAYOUT_LOCAL, publishLayoutLocalSettingsMap); _schedulerEngineHelper.schedule( schedulerResponse.getTrigger(), StorageType.PERSISTED, schedulerResponse.getDescription(), DestinationNames.LAYOUTS_LOCAL_PUBLISHER, exportImportConfiguration.getExportImportConfigurationId(), 0); } protected void updateScheduledPublications(Group group) throws PortalException { try (LoggingTimer loggingTimer = new LoggingTimer( String.valueOf(group.getGroupId()))) { boolean localStaging = true; if (group.isStagedRemotely() || group.hasRemoteStagingGroup()) { localStaging = false; } List<SchedulerResponse> scheduledJobs = _schedulerEngineHelper.getScheduledJobs( getSchedulerGroupName(group.getGroupId(), localStaging), StorageType.PERSISTED); for (SchedulerResponse schedulerResponse : scheduledJobs) { if (localStaging) { updateScheduledLocalPublication(schedulerResponse); } else { updateScheduleRemotePublication(schedulerResponse); } } } } protected void updateScheduleRemotePublication( SchedulerResponse schedulerResponse) throws PortalException { Message message = schedulerResponse.getMessage(); LayoutsRemotePublisherRequest publisherRequest = (LayoutsRemotePublisherRequest)message.getPayload(); User user = _userLocalService.getUser(publisherRequest.getUserId()); Map<String, Serializable> publishLayoutRemoteSettingsMap = ExportImportConfigurationSettingsMapFactory. buildPublishLayoutRemoteSettingsMap( user, publisherRequest.getSourceGroupId(), publisherRequest.isPrivateLayout(), publisherRequest.getLayoutIdMap(), publisherRequest.getParameterMap(), publisherRequest.getRemoteAddress(), publisherRequest.getRemotePort(), publisherRequest.getRemotePathContext(), publisherRequest.isSecureConnection(), publisherRequest.getRemoteGroupId(), publisherRequest.isRemotePrivateLayout()); ExportImportConfiguration exportImportConfiguration = _exportImportConfigurationLocalService. addDraftExportImportConfiguration( user.getUserId(), schedulerResponse.getDescription(), ExportImportConfigurationConstants. TYPE_SCHEDULED_PUBLISH_LAYOUT_REMOTE, publishLayoutRemoteSettingsMap); _schedulerEngineHelper.schedule( schedulerResponse.getTrigger(), StorageType.PERSISTED, schedulerResponse.getDescription(), DestinationNames.LAYOUTS_REMOTE_PUBLISHER, exportImportConfiguration.getExportImportConfigurationId(), 0); } private final ExportImportConfigurationLocalService _exportImportConfigurationLocalService; private final GroupLocalService _groupLocalService; private final SchedulerEngineHelper _schedulerEngineHelper; private final UserLocalService _userLocalService; }