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