001
014
015 package com.liferay.portal.lar.backgroundtask;
016
017 import com.liferay.portal.kernel.backgroundtask.BackgroundTaskResult;
018 import com.liferay.portal.kernel.lar.MissingReferences;
019 import com.liferay.portal.kernel.lar.PortletDataHandlerKeys;
020 import com.liferay.portal.kernel.staging.StagingUtil;
021 import com.liferay.portal.kernel.util.FileUtil;
022 import com.liferay.portal.kernel.util.GetterUtil;
023 import com.liferay.portal.kernel.util.MapUtil;
024 import com.liferay.portal.model.BackgroundTask;
025 import com.liferay.portal.service.LayoutLocalServiceUtil;
026
027 import java.io.File;
028 import java.io.Serializable;
029
030 import java.util.Date;
031 import java.util.Map;
032
033
036 public class LayoutStagingBackgroundTaskExecutor
037 extends BaseStagingBackgroundTaskExecutor {
038
039 @Override
040 public BackgroundTaskResult execute(BackgroundTask backgroundTask)
041 throws Exception {
042
043 Map<String, Serializable> taskContextMap =
044 backgroundTask.getTaskContextMap();
045
046 long userId = MapUtil.getLong(taskContextMap, "userId");
047 long targetGroupId = MapUtil.getLong(taskContextMap, "targetGroupId");
048
049 StagingUtil.lockGroup(userId, targetGroupId);
050
051 long sourceGroupId = MapUtil.getLong(taskContextMap, "sourceGroupId");
052 boolean privateLayout = MapUtil.getBoolean(
053 taskContextMap, "privateLayout");
054 long[] layoutIds = GetterUtil.getLongValues(
055 taskContextMap.get("layoutIds"));
056 Map<String, String[]> parameterMap =
057 (Map<String, String[]>)taskContextMap.get("parameterMap");
058 Date startDate = (Date)taskContextMap.get("startDate");
059 Date endDate = (Date)taskContextMap.get("endDate");
060
061 clearBackgroundTaskStatus(backgroundTask);
062
063 File file = null;
064 MissingReferences missingReferences = null;
065
066 try {
067 file = LayoutLocalServiceUtil.exportLayoutsAsFile(
068 sourceGroupId, privateLayout, layoutIds, parameterMap,
069 startDate, endDate);
070
071 backgroundTask = markBackgroundTask(backgroundTask, "exported");
072
073 missingReferences =
074 LayoutLocalServiceUtil.validateImportLayoutsFile(
075 userId, targetGroupId, privateLayout, parameterMap, file);
076
077 backgroundTask = markBackgroundTask(backgroundTask, "validated");
078
079 LayoutLocalServiceUtil.importLayouts(
080 userId, targetGroupId, privateLayout, parameterMap, file);
081
082 boolean updateLastPublishDate = MapUtil.getBoolean(
083 parameterMap, PortletDataHandlerKeys.UPDATE_LAST_PUBLISH_DATE);
084
085 if (updateLastPublishDate) {
086 Date lastPublishDate = endDate;
087
088 if (lastPublishDate == null) {
089 lastPublishDate = new Date();
090 }
091
092 StagingUtil.updateLastPublishDate(
093 sourceGroupId, privateLayout, lastPublishDate);
094 }
095 }
096 finally {
097 FileUtil.delete(file);
098
099 StagingUtil.unlockGroup(targetGroupId);
100 }
101
102 return processMissingReferences(backgroundTask, missingReferences);
103 }
104
105 }