001
014
015 package com.liferay.portlet.exportimport.messaging;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.kernel.messaging.BaseMessageStatusMessageListener;
020 import com.liferay.portal.kernel.messaging.sender.SingleDestinationMessageSender;
021 import com.liferay.portal.kernel.messaging.sender.SingleDestinationMessageSenderFactoryUtil;
022 import com.liferay.portal.kernel.util.ArrayUtil;
023 import com.liferay.portal.model.CompanyConstants;
024 import com.liferay.portal.model.User;
025 import com.liferay.portal.security.auth.CompanyThreadLocal;
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.HashMap;
038 import java.util.Map;
039
040
043 public abstract class BasePublisherMessageListener
044 extends BaseMessageStatusMessageListener {
045
046 public void afterPropertiesSet() {
047 SingleDestinationMessageSender singleDestinationMessageSender =
048 SingleDestinationMessageSenderFactoryUtil.
049 createSingleDestinationMessageSender(_destinationName);
050
051 setStatusSender(singleDestinationMessageSender);
052 }
053
054 public void setDestinationName(String destinationName) {
055 _destinationName = destinationName;
056 }
057
058 protected void initThreadLocals(
059 long userId, Map<String, String[]> parameterMap)
060 throws PortalException {
061
062 User user = UserLocalServiceUtil.getUserById(userId);
063
064 CompanyThreadLocal.setCompanyId(user.getCompanyId());
065
066 PrincipalThreadLocal.setName(userId);
067
068 PermissionChecker permissionChecker = null;
069
070 try {
071 permissionChecker = PermissionCheckerFactoryUtil.create(user);
072 }
073 catch (Exception e) {
074 throw new SystemException(e);
075 }
076
077 PermissionThreadLocal.setPermissionChecker(permissionChecker);
078
079 ServiceContext serviceContext = new ServiceContext();
080
081 serviceContext.setCompanyId(user.getCompanyId());
082 serviceContext.setPathMain(PortalUtil.getPathMain());
083 serviceContext.setSignedIn(!user.isDefaultUser());
084 serviceContext.setUserId(user.getUserId());
085
086 Map<String, Serializable> attributes = new HashMap<>();
087
088 for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
089 String param = entry.getKey();
090 String[] values = entry.getValue();
091
092 if (ArrayUtil.isNotEmpty(values)) {
093 if (values.length == 1) {
094 attributes.put(param, values[0]);
095 }
096 else {
097 attributes.put(param, values);
098 }
099 }
100 }
101
102 serviceContext.setAttributes(attributes);
103
104 ServiceContextThreadLocal.pushServiceContext(serviceContext);
105 }
106
107 protected void resetThreadLocals() {
108 CompanyThreadLocal.setCompanyId(CompanyConstants.SYSTEM);
109 PermissionThreadLocal.setPermissionChecker(null);
110 PrincipalThreadLocal.setName(null);
111 ServiceContextThreadLocal.popServiceContext();
112 }
113
114 private String _destinationName;
115
116 }