001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portlet.exportimport.lar;
016    
017    import com.liferay.portal.kernel.backgroundtask.BackgroundTaskConstants;
018    import com.liferay.portal.kernel.backgroundtask.BackgroundTaskStatusMessageSender;
019    import com.liferay.portal.kernel.backgroundtask.BackgroundTaskThreadLocal;
020    import com.liferay.portal.kernel.messaging.Message;
021    import com.liferay.portal.kernel.util.LongWrapper;
022    import com.liferay.portal.model.Portlet;
023    import com.liferay.portal.model.StagedModel;
024    import com.liferay.portal.service.PortletLocalServiceUtil;
025    
026    import java.util.HashMap;
027    import java.util.Map;
028    
029    /**
030     * @author Michael C. Han
031     */
032    public class PortletDataHandlerStatusMessageSenderImpl
033            implements PortletDataHandlerStatusMessageSender {
034    
035            /**
036             * @deprecated As of 7.0.0, replaced by {@link #sendStatusMessage(String,
037             *             String[], ManifestSummary)}
038             */
039            @Deprecated
040            @Override
041            public void sendStatusMessage(
042                    String messageType, ManifestSummary manifestSummary) {
043    
044                    sendStatusMessage(messageType, (String[])null, manifestSummary);
045            }
046    
047            @Override
048            public void sendStatusMessage(
049                    String messageType, String portletId, ManifestSummary manifestSummary) {
050    
051                    Message message = new Message();
052    
053                    init(message, messageType, manifestSummary);
054    
055                    message.put("portletId", portletId);
056    
057                    Portlet portlet = PortletLocalServiceUtil.getPortletById(portletId);
058    
059                    if (portlet != null) {
060                            PortletDataHandler portletDataHandler =
061                                    portlet.getPortletDataHandlerInstance();
062    
063                            long portletModelAdditionCountersTotal =
064                                    portletDataHandler.getExportModelCount(manifestSummary);
065    
066                            if (portletModelAdditionCountersTotal < 0) {
067                                    portletModelAdditionCountersTotal = 0;
068                            }
069    
070                            message.put(
071                                    "portletModelAdditionCountersTotal",
072                                    portletModelAdditionCountersTotal);
073                    }
074    
075                    _backgroundTaskStatusMessageSender.sendBackgroundTaskStatusMessage(
076                            message);
077            }
078    
079            @Override
080            public void sendStatusMessage(
081                    String messageType, String[] portletIds,
082                    ManifestSummary manifestSummary) {
083    
084                    Message message = new Message();
085    
086                    init(message, messageType, manifestSummary);
087    
088                    message.put("portletIds", portletIds);
089    
090                    _backgroundTaskStatusMessageSender.sendBackgroundTaskStatusMessage(
091                            message);
092            }
093    
094            @Override
095            public <T extends StagedModel> void sendStatusMessage(
096                    String messageType, T stagedModel, ManifestSummary manifestSummary) {
097    
098                    Message message = new Message();
099    
100                    init(message, messageType, manifestSummary);
101    
102                    StagedModelDataHandler<T> stagedModelDataHandler =
103                            (StagedModelDataHandler<T>)
104                                    StagedModelDataHandlerRegistryUtil.getStagedModelDataHandler(
105                                            stagedModel.getModelClassName());
106    
107                    message.put(
108                            "stagedModelName",
109                            stagedModelDataHandler.getDisplayName(stagedModel));
110    
111                    message.put(
112                            "stagedModelType",
113                            String.valueOf(stagedModel.getStagedModelType()));
114                    message.put("uuid", stagedModel.getUuid());
115    
116                    _backgroundTaskStatusMessageSender.sendBackgroundTaskStatusMessage(
117                            message);
118            }
119    
120            public void setBackgroundTaskStatusMessageSender(
121                    BackgroundTaskStatusMessageSender backgroundTaskStatusMessageSender) {
122    
123                    _backgroundTaskStatusMessageSender = backgroundTaskStatusMessageSender;
124            }
125    
126            protected void init(
127                    Message message, String messageType, ManifestSummary manifestSummary) {
128    
129                    message.put(
130                            BackgroundTaskConstants.BACKGROUND_TASK_ID,
131                            BackgroundTaskThreadLocal.getBackgroundTaskId());
132                    message.put("messageType", messageType);
133    
134                    Map<String, LongWrapper> modelAdditionCounters =
135                            manifestSummary.getModelAdditionCounters();
136    
137                    message.put(
138                            "modelAdditionCounters", new HashMap<>(modelAdditionCounters));
139    
140                    Map<String, LongWrapper> modelDeletionCounters =
141                            manifestSummary.getModelDeletionCounters();
142    
143                    message.put(
144                            "modelDeletionCounters", new HashMap<>(modelDeletionCounters));
145            }
146    
147            private BackgroundTaskStatusMessageSender
148                    _backgroundTaskStatusMessageSender;
149    
150    }