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