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 String remotePathContext = publisherRequest.getRemotePathContext();
077 boolean secureConnection = publisherRequest.isSecureConnection();
078 long remoteGroupId = publisherRequest.getRemoteGroupId();
079 boolean remotePrivateLayout = publisherRequest.isRemotePrivateLayout();
080 Date startDate = publisherRequest.getStartDate();
081 Date endDate = publisherRequest.getEndDate();
082
083 String range = MapUtil.getString(parameterMap, "range");
084
085 if (range.equals("last")) {
086 int last = MapUtil.getInteger(parameterMap, "last");
087
088 if (last > 0) {
089 Date scheduledFireTime =
090 publisherRequest.getScheduledFireTime();
091
092 startDate = new Date(
093 scheduledFireTime.getTime() - (last * Time.HOUR));
094
095 endDate = scheduledFireTime;
096 }
097 }
098
099 PrincipalThreadLocal.setName(userId);
100
101 User user = UserLocalServiceUtil.getUserById(userId);
102
103 PermissionChecker permissionChecker =
104 PermissionCheckerFactoryUtil.create(user);
105
106 PermissionThreadLocal.setPermissionChecker(permissionChecker);
107
108 ServiceContext serviceContext = new ServiceContext();
109
110 serviceContext.setCompanyId(user.getCompanyId());
111 serviceContext.setPathMain(PortalUtil.getPathMain());
112 serviceContext.setSignedIn(!user.isDefaultUser());
113 serviceContext.setUserId(user.getUserId());
114
115 Map<String, Serializable> attributes =
116 new HashMap<String, Serializable>();
117
118 for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
119 String param = entry.getKey();
120 String[] values = entry.getValue();
121
122 if ((values != null) && (values.length > 0)) {
123 if (values.length == 1) {
124 attributes.put(param, values[0]);
125 }
126 else {
127 attributes.put(param, values);
128 }
129 }
130 }
131
132 serviceContext.setAttributes(attributes);
133
134 ServiceContextThreadLocal.pushServiceContext(serviceContext);
135
136 try {
137 StagingUtil.copyRemoteLayouts(
138 sourceGroupId, privateLayout, layoutIdMap, parameterMap,
139 remoteAddress, remotePort, remotePathContext, secureConnection,
140 remoteGroupId, remotePrivateLayout, startDate, endDate);
141 }
142 finally {
143 PrincipalThreadLocal.setName(null);
144 PermissionThreadLocal.setPermissionChecker(null);
145 }
146 }
147
148 }