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.StringUtil;
027    import com.liferay.portal.kernel.util.Validator;
028    import com.liferay.portal.model.BackgroundTask;
029    import com.liferay.portal.model.TrashedModel;
030    import com.liferay.portal.security.auth.PrincipalException;
031    import com.liferay.portal.service.BackgroundTaskLocalServiceUtil;
032    import com.liferay.portal.struts.PortletAction;
033    import com.liferay.portal.util.PortalUtil;
034    import com.liferay.portlet.exportimport.configuration.ExportImportConfigurationConstants;
035    import com.liferay.portlet.exportimport.configuration.ExportImportConfigurationHelper;
036    import com.liferay.portlet.exportimport.configuration.ExportImportConfigurationSettingsMapFactory;
037    import com.liferay.portlet.exportimport.model.ExportImportConfiguration;
038    import com.liferay.portlet.exportimport.service.ExportImportConfigurationServiceUtil;
039    import com.liferay.portlet.exportimport.service.ExportImportServiceUtil;
040    import com.liferay.portlet.sites.action.ActionUtil;
041    import com.liferay.portlet.trash.service.TrashEntryServiceUtil;
042    import com.liferay.portlet.trash.util.TrashUtil;
043    
044    import java.io.Serializable;
045    
046    import java.util.ArrayList;
047    import java.util.List;
048    import java.util.Map;
049    
050    import javax.portlet.ActionRequest;
051    import javax.portlet.ActionResponse;
052    import javax.portlet.PortletConfig;
053    import javax.portlet.PortletContext;
054    import javax.portlet.PortletRequestDispatcher;
055    import javax.portlet.RenderRequest;
056    import javax.portlet.RenderResponse;
057    import javax.portlet.ResourceRequest;
058    import javax.portlet.ResourceResponse;
059    
060    import org.apache.struts.action.ActionForm;
061    import org.apache.struts.action.ActionForward;
062    import org.apache.struts.action.ActionMapping;
063    
064    /**
065     * @author Levente Hud??k
066     */
067    public class EditExportConfigurationAction extends PortletAction {
068    
069            @Override
070            public void processAction(
071                            ActionMapping actionMapping, ActionForm actionForm,
072                            PortletConfig portletConfig, ActionRequest actionRequest,
073                            ActionResponse actionResponse)
074                    throws Exception {
075    
076                    hideDefaultSuccessMessage(actionRequest);
077    
078                    String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
079    
080                    try {
081                            if (cmd.equals(Constants.ADD) || cmd.equals(Constants.UPDATE)) {
082                                    updateExportConfiguration(actionRequest);
083                            }
084                            else if (cmd.equals(Constants.DELETE)) {
085                                    deleteExportImportConfiguration(actionRequest, false);
086                            }
087                            else if (cmd.equals(Constants.EXPORT)) {
088                                    long exportImportConfigurationId = ParamUtil.getLong(
089                                            actionRequest, "exportImportConfigurationId");
090    
091                                    ExportImportServiceUtil.exportLayoutsAsFileInBackground(
092                                            exportImportConfigurationId);
093                            }
094                            else if (cmd.equals(Constants.MOVE_TO_TRASH)) {
095                                    deleteExportImportConfiguration(actionRequest, true);
096                            }
097                            else if (cmd.equals(Constants.RESTORE)) {
098                                    restoreTrashEntries(actionRequest);
099                            }
100                            else if (cmd.equals(Constants.RELAUNCH)) {
101                                    relaunchExportLayoutConfiguration(actionRequest);
102                            }
103                            else if (Validator.isNull(cmd)) {
104                                    addSessionMessages(actionRequest);
105                            }
106    
107                            String redirect = ParamUtil.getString(actionRequest, "redirect");
108    
109                            sendRedirect(actionRequest, actionResponse, redirect);
110                    }
111                    catch (Exception e) {
112                            _log.error(e, e);
113    
114                            SessionErrors.add(actionRequest, e.getClass());
115    
116                            sendRedirect(actionRequest, actionResponse);
117                    }
118            }
119    
120            @Override
121            public ActionForward render(
122                            ActionMapping actionMapping, ActionForm actionForm,
123                            PortletConfig portletConfig, RenderRequest renderRequest,
124                            RenderResponse renderResponse)
125                    throws Exception {
126    
127                    try {
128                            ActionUtil.getGroup(renderRequest);
129                    }
130                    catch (Exception e) {
131                            if (e instanceof NoSuchGroupException ||
132                                    e instanceof PrincipalException) {
133    
134                                    SessionErrors.add(renderRequest, e.getClass());
135    
136                                    return actionMapping.findForward("portlet.export_import.error");
137                            }
138                            else {
139                                    throw e;
140                            }
141                    }
142    
143                    return actionMapping.findForward(
144                            getForward(renderRequest, "portlet.export_import.export_layouts"));
145            }
146    
147            @Override
148            public void serveResource(
149                            ActionMapping actionMapping, ActionForm actionForm,
150                            PortletConfig portletConfig, ResourceRequest resourceRequest,
151                            ResourceResponse resourceResponse)
152                    throws Exception {
153    
154                    PortletContext portletContext = portletConfig.getPortletContext();
155    
156                    PortletRequestDispatcher portletRequestDispatcher =
157                            portletContext.getRequestDispatcher(
158                                    "/html/portlet/export_import/export_layouts_processes.jsp");
159    
160                    portletRequestDispatcher.include(resourceRequest, resourceResponse);
161            }
162    
163            protected void addSessionMessages(ActionRequest actionRequest)
164                    throws Exception {
165    
166                    String portletId = PortalUtil.getPortletId(actionRequest);
167                    long exportImportConfigurationId = ParamUtil.getLong(
168                            actionRequest, "exportImportConfigurationId");
169    
170                    SessionMessages.add(
171                            actionRequest, portletId + "exportImportConfigurationId",
172                            exportImportConfigurationId);
173    
174                    String name = ParamUtil.getString(actionRequest, "name");
175                    String description = ParamUtil.getString(actionRequest, "description");
176    
177                    SessionMessages.add(actionRequest, portletId + "name", name);
178                    SessionMessages.add(
179                            actionRequest, portletId + "description", description);
180    
181                    long groupId = ParamUtil.getLong(actionRequest, "groupId");
182    
183                    Map<String, Serializable> settingsMap =
184                            ExportImportConfigurationSettingsMapFactory.buildSettingsMap(
185                                    actionRequest, groupId,
186                                    ExportImportConfigurationConstants.TYPE_EXPORT_LAYOUT);
187    
188                    SessionMessages.add(
189                            actionRequest, portletId + "settingsMap", settingsMap);
190            }
191    
192            protected void deleteExportImportConfiguration(
193                            ActionRequest actionRequest, boolean moveToTrash)
194                    throws PortalException {
195    
196                    long[] deleteExportImportConfigurationIds = null;
197    
198                    long exportImportConfigurationId = ParamUtil.getLong(
199                            actionRequest, "exportImportConfigurationId");
200    
201                    if (exportImportConfigurationId > 0) {
202                            deleteExportImportConfigurationIds =
203                                    new long[] {exportImportConfigurationId};
204                    }
205                    else {
206                            deleteExportImportConfigurationIds = StringUtil.split(
207                                    ParamUtil.getString(
208                                            actionRequest, "deleteExportImportConfigurationIds"), 0L);
209                    }
210    
211                    List<TrashedModel> trashedModels = new ArrayList<>();
212    
213                    for (long deleteExportImportConfigurationId :
214                                    deleteExportImportConfigurationIds) {
215    
216                            if (moveToTrash) {
217                                    ExportImportConfiguration exportImportConfiguration =
218                                            ExportImportConfigurationServiceUtil.
219                                                    moveExportImportConfigurationToTrash(
220                                                            deleteExportImportConfigurationId);
221    
222                                    trashedModels.add(exportImportConfiguration);
223                            }
224                            else {
225                                    ExportImportConfigurationServiceUtil.
226                                            deleteExportImportConfiguration(
227                                                    deleteExportImportConfigurationId);
228                            }
229                    }
230    
231                    if (moveToTrash && !trashedModels.isEmpty()) {
232                            TrashUtil.addTrashSessionMessages(actionRequest, trashedModels);
233    
234                            hideDefaultSuccessMessage(actionRequest);
235                    }
236            }
237    
238            protected void relaunchExportLayoutConfiguration(
239                            ActionRequest actionRequest)
240                    throws Exception {
241    
242                    long backgroundTaskId = ParamUtil.getLong(
243                            actionRequest, "backgroundTaskId");
244    
245                    BackgroundTask backgroundTask =
246                            BackgroundTaskLocalServiceUtil.getBackgroundTask(backgroundTaskId);
247    
248                    Map<String, Serializable> taskContextMap =
249                            backgroundTask.getTaskContextMap();
250    
251                    long exportImportConfigurationId = MapUtil.getLong(
252                            taskContextMap, "exportImportConfigurationId");
253    
254                    ExportImportServiceUtil.exportLayoutsAsFileInBackground(
255                            exportImportConfigurationId);
256            }
257    
258            protected void restoreTrashEntries(ActionRequest actionRequest)
259                    throws Exception {
260    
261                    long[] restoreTrashEntryIds = StringUtil.split(
262                            ParamUtil.getString(actionRequest, "restoreTrashEntryIds"), 0L);
263    
264                    for (long restoreTrashEntryId : restoreTrashEntryIds) {
265                            TrashEntryServiceUtil.restoreEntry(restoreTrashEntryId);
266                    }
267            }
268    
269            protected ExportImportConfiguration updateExportConfiguration(
270                            ActionRequest actionRequest)
271                    throws Exception {
272    
273                    long exportImportConfigurationId = ParamUtil.getLong(
274                            actionRequest, "exportImportConfigurationId");
275    
276                    if (exportImportConfigurationId > 0) {
277                            return ExportImportConfigurationHelper.
278                                    updateExportLayoutExportImportConfiguration(actionRequest);
279                    }
280                    else {
281                            return ExportImportConfigurationHelper.
282                                    addExportLayoutExportImportConfiguration(actionRequest);
283                    }
284            }
285    
286            private static final Log _log = LogFactoryUtil.getLog(
287                    EditExportConfigurationAction.class);
288    
289    }