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