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 if (scheduledFireTime == null) {
106 scheduledFireTime = new Date();
107 }
108
109 startDate = new Date(
110 scheduledFireTime.getTime() - (last * Time.HOUR));
111
112 endDate = scheduledFireTime;
113 }
114 }
115
116 PrincipalThreadLocal.setName(userId);
117
118 User user = UserLocalServiceUtil.getUserById(userId);
119
120 PermissionChecker permissionChecker =
121 PermissionCheckerFactoryUtil.create(user);
122
123 PermissionThreadLocal.setPermissionChecker(permissionChecker);
124
125 ServiceContext serviceContext = new ServiceContext();
126
127 serviceContext.setCompanyId(user.getCompanyId());
128 serviceContext.setPathMain(PortalUtil.getPathMain());
129 serviceContext.setSignedIn(!user.isDefaultUser());
130 serviceContext.setUserId(user.getUserId());
131
132 Map<String, Serializable> attributes =
133 new HashMap<String, Serializable>();
134
135 for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
136 String param = entry.getKey();
137 String[] values = entry.getValue();
138
139 if ((values != null) && (values.length > 0)) {
140 if (values.length == 1) {
141 attributes.put(param, values[0]);
142 }
143 else {
144 attributes.put(param, values);
145 }
146 }
147 }
148
149 serviceContext.setAttributes(attributes);
150
151 ServiceContextThreadLocal.pushServiceContext(serviceContext);
152
153 try {
154 if (command.equals(
155 LayoutsLocalPublisherRequest.COMMAND_ALL_PAGES)) {
156
157 StagingUtil.publishLayouts(
158 userId, sourceGroupId, targetGroupId, privateLayout,
159 parameterMap, startDate, endDate);
160 }
161 else if (command.equals(
162 LayoutsLocalPublisherRequest.COMMAND_SELECTED_PAGES)) {
163
164 StagingUtil.publishLayouts(
165 userId, sourceGroupId, targetGroupId, privateLayout,
166 layoutIdMap, parameterMap, startDate, endDate);
167 }
168 }
169 finally {
170 PrincipalThreadLocal.setName(null);
171 PermissionThreadLocal.setPermissionChecker(null);
172 }
173 }
174
175 }