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