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
044 public class LayoutsRemotePublisherMessageListener
045 extends BaseMessageStatusMessageListener {
046
047 public LayoutsRemotePublisherMessageListener() {
048 }
049
050
053 public LayoutsRemotePublisherMessageListener(
054 SingleDestinationMessageSender statusSender,
055 MessageSender responseSender) {
056
057 super(statusSender, responseSender);
058 }
059
060 @Override
061 protected void doReceive(Message message, MessageStatus messageStatus)
062 throws Exception {
063
064 LayoutsRemotePublisherRequest publisherRequest =
065 (LayoutsRemotePublisherRequest)message.getPayload();
066
067 messageStatus.setPayload(publisherRequest);
068
069 long userId = publisherRequest.getUserId();
070 long sourceGroupId = publisherRequest.getSourceGroupId();
071 boolean privateLayout = publisherRequest.isPrivateLayout();
072 Map<Long, Boolean> layoutIdMap = publisherRequest.getLayoutIdMap();
073 Map<String, String[]> parameterMap = publisherRequest.getParameterMap();
074 String remoteAddress = publisherRequest.getRemoteAddress();
075 int remotePort = publisherRequest.getRemotePort();
076 boolean secureConnection = publisherRequest.isSecureConnection();
077 long remoteGroupId = publisherRequest.getRemoteGroupId();
078 boolean remotePrivateLayout = publisherRequest.isRemotePrivateLayout();
079 Date startDate = publisherRequest.getStartDate();
080 Date endDate = publisherRequest.getEndDate();
081
082 String range = MapUtil.getString(parameterMap, "range");
083
084 if (range.equals("last")) {
085 int last = MapUtil.getInteger(parameterMap, "last");
086
087 if (last > 0) {
088 Date scheduledFireTime =
089 publisherRequest.getScheduledFireTime();
090
091 startDate = new Date(
092 scheduledFireTime.getTime() - (last * Time.HOUR));
093
094 endDate = scheduledFireTime;
095 }
096 }
097
098 PrincipalThreadLocal.setName(userId);
099
100 User user = UserLocalServiceUtil.getUserById(userId);
101
102 PermissionChecker permissionChecker =
103 PermissionCheckerFactoryUtil.create(user);
104
105 PermissionThreadLocal.setPermissionChecker(permissionChecker);
106
107 ServiceContext serviceContext = new ServiceContext();
108
109 serviceContext.setCompanyId(user.getCompanyId());
110 serviceContext.setPathMain(PortalUtil.getPathMain());
111 serviceContext.setSignedIn(!user.isDefaultUser());
112 serviceContext.setUserId(user.getUserId());
113
114 Map<String, Serializable> attributes =
115 new HashMap<String, Serializable>();
116
117 for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
118 String param = entry.getKey();
119 String[] values = entry.getValue();
120
121 if ((values != null) && (values.length > 0)) {
122 if (values.length == 1) {
123 attributes.put(param, values[0]);
124 }
125 else {
126 attributes.put(param, values);
127 }
128 }
129 }
130
131 serviceContext.setAttributes(attributes);
132
133 ServiceContextThreadLocal.pushServiceContext(serviceContext);
134
135 try {
136 StagingUtil.copyRemoteLayouts(
137 sourceGroupId, privateLayout, layoutIdMap, parameterMap,
138 remoteAddress, remotePort, secureConnection, remoteGroupId,
139 remotePrivateLayout, startDate, endDate);
140 }
141 finally {
142 PrincipalThreadLocal.setName(null);
143 PermissionThreadLocal.setPermissionChecker(null);
144 }
145 }
146
147 }