001
014
015 package com.liferay.portal.messaging;
016
017 import com.liferay.portal.kernel.messaging.BaseMessageStatusMessageListener;
018 import com.liferay.portal.kernel.messaging.Message;
019 import com.liferay.portal.kernel.messaging.MessageStatus;
020 import com.liferay.portal.kernel.messaging.sender.MessageSender;
021 import com.liferay.portal.kernel.messaging.sender.SingleDestinationMessageSender;
022 import com.liferay.portal.kernel.staging.StagingUtil;
023 import com.liferay.portal.kernel.util.GetterUtil;
024 import com.liferay.portal.kernel.util.MapUtil;
025 import com.liferay.portal.kernel.util.Time;
026 import com.liferay.portal.model.LayoutSet;
027 import com.liferay.portal.model.User;
028 import com.liferay.portal.security.auth.PrincipalThreadLocal;
029 import com.liferay.portal.security.permission.PermissionChecker;
030 import com.liferay.portal.security.permission.PermissionCheckerFactoryUtil;
031 import com.liferay.portal.security.permission.PermissionThreadLocal;
032 import com.liferay.portal.service.LayoutSetLocalServiceUtil;
033 import com.liferay.portal.service.ServiceContext;
034 import com.liferay.portal.service.ServiceContextThreadLocal;
035 import com.liferay.portal.service.UserLocalServiceUtil;
036 import com.liferay.portal.util.PortalUtil;
037
038 import java.io.Serializable;
039
040 import java.util.Date;
041 import java.util.HashMap;
042 import java.util.Map;
043
044
048 public class LayoutsLocalPublisherMessageListener
049 extends BaseMessageStatusMessageListener {
050
051 public LayoutsLocalPublisherMessageListener() {
052 }
053
054
057 public LayoutsLocalPublisherMessageListener(
058 SingleDestinationMessageSender statusSender,
059 MessageSender responseSender) {
060
061 super(statusSender, responseSender);
062 }
063
064 @Override
065 protected void doReceive(Message message, MessageStatus messageStatus)
066 throws Exception {
067
068 LayoutsLocalPublisherRequest publisherRequest =
069 (LayoutsLocalPublisherRequest)message.getPayload();
070
071 messageStatus.setPayload(publisherRequest);
072
073 String command = publisherRequest.getCommand();
074 long userId = publisherRequest.getUserId();
075 long sourceGroupId = publisherRequest.getSourceGroupId();
076 long targetGroupId = publisherRequest.getTargetGroupId();
077 boolean privateLayout = publisherRequest.isPrivateLayout();
078 Map<Long, Boolean> layoutIdMap = publisherRequest.getLayoutIdMap();
079 Map<String, String[]> parameterMap = publisherRequest.getParameterMap();
080 Date startDate = publisherRequest.getStartDate();
081 Date endDate = publisherRequest.getEndDate();
082
083 String range = MapUtil.getString(parameterMap, "range");
084
085 if (range.equals("fromLastPublishDate")) {
086 LayoutSet layoutSet = LayoutSetLocalServiceUtil.getLayoutSet(
087 sourceGroupId, privateLayout);
088
089 long lastPublishDate = GetterUtil.getLong(
090 layoutSet.getSettingsProperty("last-publish-date"));
091
092 if (lastPublishDate > 0) {
093 endDate = new Date();
094
095 startDate = new Date(lastPublishDate);
096 }
097 }
098 else if (range.equals("last")) {
099 int last = MapUtil.getInteger(parameterMap, "last");
100
101 if (last > 0) {
102 Date scheduledFireTime =
103 publisherRequest.getScheduledFireTime();
104
105 startDate = new Date(
106 scheduledFireTime.getTime() - (last * Time.HOUR));
107
108 endDate = scheduledFireTime;
109 }
110 }
111
112 PrincipalThreadLocal.setName(userId);
113
114 User user = UserLocalServiceUtil.getUserById(userId);
115
116 PermissionChecker permissionChecker =
117 PermissionCheckerFactoryUtil.create(user);
118
119 PermissionThreadLocal.setPermissionChecker(permissionChecker);
120
121 ServiceContext serviceContext = new ServiceContext();
122
123 serviceContext.setCompanyId(user.getCompanyId());
124 serviceContext.setPathMain(PortalUtil.getPathMain());
125 serviceContext.setSignedIn(!user.isDefaultUser());
126 serviceContext.setUserId(user.getUserId());
127
128 Map<String, Serializable> attributes =
129 new HashMap<String, Serializable>();
130
131 for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
132 String param = entry.getKey();
133 String[] values = entry.getValue();
134
135 if ((values != null) && (values.length > 0)) {
136 if (values.length == 1) {
137 attributes.put(param, values[0]);
138 }
139 else {
140 attributes.put(param, values);
141 }
142 }
143 }
144
145 serviceContext.setAttributes(attributes);
146
147 ServiceContextThreadLocal.pushServiceContext(serviceContext);
148
149 try {
150 if (command.equals(
151 LayoutsLocalPublisherRequest.COMMAND_ALL_PAGES)) {
152
153 StagingUtil.publishLayouts(
154 userId, sourceGroupId, targetGroupId, privateLayout,
155 parameterMap, startDate, endDate);
156 }
157 else if (command.equals(
158 LayoutsLocalPublisherRequest.COMMAND_SELECTED_PAGES)) {
159
160 StagingUtil.publishLayouts(
161 userId, sourceGroupId, targetGroupId, privateLayout,
162 layoutIdMap, parameterMap, startDate, endDate);
163 }
164 }
165 finally {
166 PrincipalThreadLocal.setName(null);
167 PermissionThreadLocal.setPermissionChecker(null);
168 }
169 }
170
171 }