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.action;
016    
017    import com.liferay.portal.NoSuchGroupException;
018    import com.liferay.portal.kernel.exception.PortalException;
019    import com.liferay.portal.kernel.log.Log;
020    import com.liferay.portal.kernel.log.LogFactoryUtil;
021    import com.liferay.portal.kernel.servlet.SessionErrors;
022    import com.liferay.portal.kernel.servlet.SessionMessages;
023    import com.liferay.portal.kernel.util.Constants;
024    import com.liferay.portal.kernel.util.MapUtil;
025    import com.liferay.portal.kernel.util.ParamUtil;
026    import com.liferay.portal.kernel.util.Validator;
027    import com.liferay.portal.model.BackgroundTask;
028    import com.liferay.portal.security.auth.PrincipalException;
029    import com.liferay.portal.service.BackgroundTaskLocalServiceUtil;
030    import com.liferay.portal.theme.ThemeDisplay;
031    import com.liferay.portal.util.PortalUtil;
032    import com.liferay.portal.util.WebKeys;
033    import com.liferay.portlet.exportimport.configuration.ExportImportConfigurationConstants;
034    import com.liferay.portlet.exportimport.configuration.ExportImportConfigurationHelper;
035    import com.liferay.portlet.exportimport.configuration.ExportImportConfigurationSettingsMapFactory;
036    import com.liferay.portlet.exportimport.model.ExportImportConfiguration;
037    import com.liferay.portlet.exportimport.service.ExportImportConfigurationLocalServiceUtil;
038    import com.liferay.portlet.exportimport.staging.StagingUtil;
039    import com.liferay.portlet.sites.action.ActionUtil;
040    
041    import java.io.Serializable;
042    
043    import java.util.Map;
044    
045    import javax.portlet.ActionRequest;
046    import javax.portlet.ActionResponse;
047    import javax.portlet.PortletConfig;
048    import javax.portlet.PortletContext;
049    import javax.portlet.PortletRequestDispatcher;
050    import javax.portlet.RenderRequest;
051    import javax.portlet.RenderResponse;
052    import javax.portlet.ResourceRequest;
053    import javax.portlet.ResourceResponse;
054    
055    import org.apache.struts.action.ActionForm;
056    import org.apache.struts.action.ActionForward;
057    import org.apache.struts.action.ActionMapping;
058    
059    /**
060     * @author Daniel Kocsis
061     * @author Mate Thurzo
062     * @author Levente Hud??k
063     */
064    public class EditPublishConfigurationAction
065            extends EditExportConfigurationAction {
066    
067            @Override
068            public void processAction(
069                            ActionMapping actionMapping, ActionForm actionForm,
070                            PortletConfig portletConfig, ActionRequest actionRequest,
071                            ActionResponse actionResponse)
072                    throws Exception {
073    
074                    hideDefaultSuccessMessage(actionRequest);
075    
076                    String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
077    
078                    ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(
079                            WebKeys.THEME_DISPLAY);
080    
081                    try {
082                            long exportImportConfigurationId = ParamUtil.getLong(
083                                    actionRequest, "exportImportConfigurationId");
084    
085                            if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
086                                    updatePublishConfiguration(actionRequest);
087                            }
088                            else if (cmd.equals(Constants.DELETE)) {
089                                    deleteExportImportConfiguration(actionRequest, false);
090                            }
091                            else if (cmd.equals(Constants.MOVE_TO_TRASH)) {
092                                    deleteExportImportConfiguration(actionRequest, true);
093                            }
094                            else if (cmd.equals(Constants.PUBLISH_TO_LIVE)) {
095                                    StagingUtil.publishLayouts(
096                                            themeDisplay.getUserId(), exportImportConfigurationId);
097                            }
098                            else if (cmd.equals(Constants.PUBLISH_TO_REMOTE)) {
099                                    StagingUtil.copyRemoteLayouts(exportImportConfigurationId);
100                            }
101                            else if (cmd.equals(Constants.RELAUNCH)) {
102                                    relaunchPublishLayoutConfiguration(
103                                            themeDisplay.getUserId(), actionRequest);
104                            }
105                            else if (Validator.isNull(cmd)) {
106                                    addSessionMessages(actionRequest);
107                            }
108    
109                            String redirect = ParamUtil.getString(actionRequest, "redirect");
110    
111                            sendRedirect(actionRequest, actionResponse, redirect);
112                    }
113                    catch (Exception e) {
114                            _log.error(e, e);
115    
116                            SessionErrors.add(actionRequest, e.getClass());
117    
118                            sendRedirect(actionRequest, actionResponse);
119                    }
120            }
121    
122            @Override
123            public ActionForward render(
124                            ActionMapping actionMapping, ActionForm actionForm,
125                            PortletConfig portletConfig, RenderRequest renderRequest,
126                            RenderResponse renderResponse)
127                    throws Exception {
128    
129                    try {
130                            ActionUtil.getGroup(renderRequest);
131                    }
132                    catch (Exception e) {
133                            if (e instanceof NoSuchGroupException ||
134                                    e instanceof PrincipalException) {
135    
136                                    SessionErrors.add(renderRequest, e.getClass());
137    
138                                    return actionMapping.findForward("portlet.export_import.error");
139                            }
140                            else {
141                                    throw e;
142                            }
143                    }
144    
145                    return actionMapping.findForward(
146                            getForward(renderRequest, "portlet.export_import.publish_layouts"));
147            }
148    
149            @Override
150            public void serveResource(
151                            ActionMapping actionMapping, ActionForm actionForm,
152                            PortletConfig portletConfig, ResourceRequest resourceRequest,
153                            ResourceResponse resourceResponse)
154                    throws Exception {
155    
156                    PortletContext portletContext = portletConfig.getPortletContext();
157    
158                    PortletRequestDispatcher portletRequestDispatcher =
159                            portletContext.getRequestDispatcher(
160                                    "/html/portlet/export_import/publish_layouts_processes.jsp");
161    
162                    portletRequestDispatcher.include(resourceRequest, resourceResponse);
163            }
164    
165            @Override
166            protected void addSessionMessages(ActionRequest actionRequest)
167                    throws Exception {
168    
169                    String portletId = PortalUtil.getPortletId(actionRequest);
170                    long exportImportConfigurationId = ParamUtil.getLong(
171                            actionRequest, "exportImportConfigurationId");
172    
173                    SessionMessages.add(
174                            actionRequest, portletId + "exportImportConfigurationId",
175                            exportImportConfigurationId);
176    
177                    String name = ParamUtil.getString(actionRequest, "name");
178                    String description = ParamUtil.getString(actionRequest, "description");
179    
180                    SessionMessages.add(actionRequest, portletId + "name", name);
181                    SessionMessages.add(
182                            actionRequest, portletId + "description", description);
183    
184                    long groupId = ParamUtil.getLong(actionRequest, "groupId");
185    
186                    int exportImportConfigurationType =
187                            ExportImportConfigurationConstants.TYPE_PUBLISH_LAYOUT_REMOTE;
188    
189                    boolean localPublishing = ParamUtil.getBoolean(
190                            actionRequest, "localPublishing");
191    
192                    if (localPublishing) {
193                            exportImportConfigurationType =
194                                    ExportImportConfigurationConstants.TYPE_PUBLISH_LAYOUT_LOCAL;
195                    }
196    
197                    Map<String, Serializable> settingsMap =
198                            ExportImportConfigurationSettingsMapFactory.buildSettingsMap(
199                                    actionRequest, groupId, exportImportConfigurationType);
200    
201                    SessionMessages.add(
202                            actionRequest, portletId + "settingsMap", settingsMap);
203            }
204    
205            protected void relaunchPublishLayoutConfiguration(
206                            long userId, ActionRequest actionRequest)
207                    throws PortalException {
208    
209                    long backgroundTaskId = ParamUtil.getLong(
210                            actionRequest, "backgroundTaskId");
211    
212                    BackgroundTask backgroundTask =
213                            BackgroundTaskLocalServiceUtil.getBackgroundTask(backgroundTaskId);
214    
215                    Map<String, Serializable> taskContextMap =
216                            backgroundTask.getTaskContextMap();
217    
218                    ExportImportConfiguration exportImportConfiguration =
219                            ExportImportConfigurationLocalServiceUtil.
220                                    getExportImportConfiguration(
221                                            MapUtil.getLong(
222                                                    taskContextMap, "exportImportConfigurationId"));
223    
224                    if (exportImportConfiguration.getType() ==
225                                    ExportImportConfigurationConstants.TYPE_PUBLISH_LAYOUT_LOCAL) {
226    
227                            StagingUtil.publishLayouts(userId, exportImportConfiguration);
228                    }
229                    else if (exportImportConfiguration.getType() ==
230                                            ExportImportConfigurationConstants.
231                                                    TYPE_PUBLISH_LAYOUT_REMOTE) {
232    
233                            StagingUtil.copyRemoteLayouts(exportImportConfiguration);
234                    }
235            }
236    
237            protected ExportImportConfiguration updatePublishConfiguration(
238                            ActionRequest actionRequest)
239                    throws Exception {
240    
241                    long exportImportConfigurationId = ParamUtil.getLong(
242                            actionRequest, "exportImportConfigurationId");
243    
244                    boolean localPublishing = ParamUtil.getBoolean(
245                            actionRequest, "localPublishing");
246    
247                    if (exportImportConfigurationId > 0) {
248                            if (localPublishing) {
249                                    return ExportImportConfigurationHelper.
250                                            updatePublishLayoutLocalExportImportConfiguration(
251                                                    actionRequest);
252                            }
253                            else {
254                                    return ExportImportConfigurationHelper.
255                                            updatePublishLayoutRemoteExportImportConfiguration(
256                                                    actionRequest);
257                            }
258                    }
259                    else {
260                            if (localPublishing) {
261                                    return ExportImportConfigurationHelper.
262                                            addPublishLayoutLocalExportImportConfiguration(
263                                                    actionRequest);
264                            }
265                            else {
266                                    return ExportImportConfigurationHelper.
267                                            addPublishLayoutRemoteExportImportConfiguration(
268                                                    actionRequest);
269                            }
270                    }
271            }
272    
273            private static final Log _log = LogFactoryUtil.getLog(
274                    EditPublishConfigurationAction.class);
275    
276    }